Hace ya unas cuantas semanas escribí sobre la base de datos de WordPress, en aquella entrada comentaba que en WordPress todo se almacena en la tabla de posts en la base de datos, desde las páginas, las entradas del blog, los archivos subidos, etc.
Nosotros también podemos crear tipos de posts personalizados. ¿Para qué? WordPress no es solo una plataforma para crear blogs como también comenté en la entrada referente a su uso por las empresas y si se quiere desarrollar una web a medida haciendo uso de esta plataforma puede que se nos requiera crear posts personalizados.
Por poner un ejemplo. Estamos creando una web para un pueblo, se nos puede pedir introducir todos los museos que tienen con sus teléfonos, horarios de apertura y cierre, servicios, etc, por lógica no lo haremos con un tipo de post normal sino que crearemos el tipo «museo» (o una más general que luego se pueda categorizar como museo, pero esto entra en otro tema), de la misma manera se me ocurre una web para una inmobiliaria, una de cursos, etc, cualquier web que nos requiera una serie de tipo de datos personalizados.
Un poco de código
En WordPress, para crear un tipo de entrada personalizado se usará la función:
[php]register_post_type($tipo_de_post, $argumentos);[/php]
Donde $tipo_de_post es una cadena de máximo 20 caracteres en minúsculas y sin espacios y $argumentos es una matriz asociativa con las opciones y etiquetas para el post. A continuación vamos a ver las opciones más comunmente usadas y como quedaría en nuestro panel de administración.
Antes de todo decir que la función register_post_type debe ser llamada dentro de una función callback asociada a la acción init. (Recordar post sobre acciones y filtros).
El ejemplo que usaré será el que he comentado antes, que servirá para otro post. Vamos a crear el tipo de post ‘Actividad’. Lo más básico sería.
[php]
add_action(‘init’, ‘registrar_tipo’);
function registrar_tipo() {
register_post_type(‘actividad’,
array(‘labels’ => array(‘name’ => ‘Actividad’),
‘public’ => true));
}
[/php]
Este sería el resultado, podemos deducir que el label name es el nombre que se mostrará públicamente (le hemos dicho que public sea true para que sea visible) en el panel de administración.
Cuando tenemos que registrar tipos de entrada personalizados es conveniente organizar un poco el código pues si ponemos los valores directamente en la función de register_post_type nos puede quedar un código bastante sucio.
Lo suyo sería separar las partes de una forma similar a esta aunque cada uno tendrá su truco.
[php]
add_action(‘init’, ‘registrar_tipo’);
function registrar_tipo() {
$labels = array(/* Todas las etiquetas */);
$supports = array(/* Caracteristicas soportadas */);
$args = array(‘labels’ => $labels,
‘supports’ => $supports,
/* Resto de opciones */);
register_post_type(‘actividad’, $args);
}
[/php]
Todos los argumentos de configuración y etiquetas se pueden consultar en el Codex de WordPress, aquí voy a comentar algunos de los más usados y que personalmente considero que son dignos de mención.
Ya que he comentado el parámetro de configuración supports, este es un array en el que se indican los campos a rellenar para el tipo de entrada personalizada. Por defecto siempre soportan el título y el editor. Si queremos que no soporte nada en lugar de pasar un array podemos pasar el valor false y luego asignar los valores que queramos con add_post_type_support().
Los parámetros que se pueden configurar en el array de supports son los siguientes:
- title: El título de la entrada.
- editor: Editor de la entrada.
- author: Se puede seleccionar el autor de la entrada.
- thumbnail: Imagen destacada.
- excerpt: Un editor para un extracto de la entrada, un resumen.
- comments: Para indicar si se permiten comentarios para el tipo de entrada.
- trackbacks: Indica si se permiten trackbacks y pingbacks.
- custom-fields: Cuadro para campos personalizados.
- revisions: Cuadro con las revisiones de las entradas.
- post-formats: Muestra un cuadro con los formatos de entrada registrados.
- page-attributes: Tiene que estar hierarchical a true y muestra el cuadro de atributos para seleccionar el orden de las entradas.
Vamos a ver que pasa si a supports le decimos todas las opciones.
[php]
add_action(‘init’, ‘registrar_tipo’);
function registrar_tipo() {
$labels = array(/* Todas las etiquetas */);
$supports = array(‘title’, ‘editor’, ‘author’, ‘thumbnail’, ‘excerpt’, ‘comments’,
‘trackbacks’, ‘custom-fields’, ‘page-attributes’, ‘revisions’, ‘post-formats’);
$args = array(‘labels’ => $labels,
‘supports’ => $supports,
‘public’ => true,
‘hierarchical’ => true);
register_post_type(‘actividad’, $args);
}
[/php]
El tema de la imagen destacada no sale porque al tema no le hemos dicho que soporte thumbnails, lo mismo pasa con post-formats pero como podéis comprobar están todas las opciones que le hemos indicado.
Todo lo anterior es respecto a supports, pero hay más opciones.
El siguiente contenido es básicamente traducido de la documentación de WordPress, pero la pongo aquí para tenerla recopilada. Además de supports se aceptan otros parámetros de configuración.
- public: False de forma predeterminada por lo que no se ve en el panel de administración.
- show_ui: Si se crea una interfaz para el tipo de entrada o no, coge el valor de public por defecto.
- publicly_queryable: Determina si se puede consultar desde la parte pública, coge el valor de public por defecto.
- show_in_nav_menus: Determina si podemos elegir el tipo de posts en la parte de administración de menú de WordPress.
- exclude_from_search: Permite indicar que no se encuentren en la búsqueda pública de WordPress, coge por defecto el valor de public.
- hierarchical: Para indicar si una entrada de jerárquica, a modo de las páginas.
- has_archive: Permite disponer de una página de archivo. Por defecto es false.
- can_export: Determina si se puede exportar a través de la herramienta de WordPress.
- taxonomies: Para pasar categorías o etiquetas asociadas al tipo de entrada.
- menu_position: Determina la posición dentro del menú de administración.
- menu_icon: Establece el icono de la entrada.
Para el resto de opciones os recomiendo ir al Codex pues están bastante bien explicadas y con ejemplos.
Esto es todo hasta el momento, la entrada me está quedando más extensa de lo que pensaba por lo que para seguir hablando de este tema crearé otra entrada para seguir.
Hasta aquí solamente espero que se haya entendido el concepto y que existen una gran cantidad de posibilidades para configurar nuestros tipos de entradas personalizados. Custom Posts.
Si hay algún error, ¡a comentar! Como siempre digo, no soy experto y entre todos aprenderemos.
4 comentarios en «Custom posts en WordPress (1/2)»