Brico WordPress: Tutorial para crear Custom Post Types paso a paso

Brico WordPress: Tutorial para crear Custom Post Types paso a paso
4.75 (95%) 4 votos

Cuanto más avanzas en el conocimiento de WordPress, más te vas dando cuenta que no hay temas perfectos. Una de las cosas que primero suele darte problemas es que necesites un tipo de maquetación específico para una página o entrada (de ahora en adelante, a las entradas las llamaremos posts) que tu tema no contiene.

¿Por qué publico un tutorial sobre Custom Post Types?

Estoy de acuerdo, hay miles de tutoriales en la red sobre el tema, en inglés y en español, pero sinceramente aunque algunos están muy logrados, en un repaso somero de resultados por Google no he localizado ninguno que ofrezca una explicación punto por punto de lo que se está haciendo, y el por qué.

Conceptos básicos, entradas, páginas y plantillas

Si se trata de una página, podemos dentro de los atributos elegir la plantilla que queremos. Haciendo clic en el desplegable (recuadro rojo en la imagen que acompaña este texto) podemos definir una plantilla para la página de contacto por ejemplo.

tutorial-wordpress-custom-post-types-entradas-customizadas-plantillas-para-entradas-javier-tejerina

Seleccionando la apariencia de la página.

¡Ojo! siempre que nuestro tema tenga una plantilla definida. De lo contrario nos tendremos que conformar con la “Plantilla predeterminada”.

En próximos artículos veremos como crear una plantilla de página, un Page Template. Recomendamos primero leer la saga completa de como crear Child Themes. Una vez controlada esta parte crear nuestras propias plantillas de página es pan comido.

¿Pero que sucede si no queremos una plantilla de una página, sino una maquetación predefinida para posts? Digamos que necesitamos una plantilla de post.

Aquí es donde se complican las cosas, puesto que las plantillas de posts que de ahora en adelante llamaremos Custom Post Types, la forma en la que las denomina WordPress, no son seleccionables salvo que el tema – casi siempre de pago- lo permita.

Definiendo objetivos

Vamos a ponernos manos a la obra ahora que sabemos lo que es cada cosa con precisión, y crearemos nuestro Custom Post Type.

Existen plugins que te permiten crearlos fácilmente, incluso visualmente, arrastrando y pegando, pero a mi me gusta remangarme y meterme en faena siempre que sea posible. Así estaremos más cerca de crear nuestro tema completo desde cero, y cuantos menos plugins metamos a nuestra página, mejor.

En este tutorial, vamos a crear un Custom Post Type para una sección de entrevistas. Lo primero que tenemos que hacer es abrir el archivo functions.php (recordad que siempre es recomendable trabajar sobre un tema hijo en lugar de hacerlo sobre tema original directamente) y añadiremos las líneas de código que vamos a explicar a continuación.

Primeros pasos: functions.php y add_action

Vamos a añadir una acción, que es una función PHP específica de WordPress. Para ello utilizamos add_action. A esta acción, tenemos que indicarle dos parámetros fundamentales.

Como WordPress genera dinámicamente las páginas, tenemos que indicarle lo primero de todo en que punto queremos que ejecute nuestro código, para que cargue adecuadamente.

En nuestro caso, usaremos init. Técnicamente es un Initialization Hook,  tema que daría para un libro entero, por lo que vamos a simplificar este asunto al máximo. Lo que estamos haciendo usando init es decirle a WordPress que lance nuestro código una vez que se haya cargado.

En segundo lugar, indicamos como vamos a llamar la función, en nuestro caso crear_post_type. Vamos, ponerle un nombre, el que queramos.

En resumen, añadimos una acción que se ejecutará cargando la función crear_post_type en el momento en el que WordPress esté cargado.

add_action ('init', 'crear_post_type');

Creando la función

Este es un tema de programación más avanzado, pero eso no quiere decir que no se pueda explicar para que quien no domina este tema comprenda lo que estamos haciendo.

Una función es un conjunto de instrucciones que permiten procesar las variables para obtener un resultado. Ahora que le hemos dicho a WordPress lo que tiene que ejecutar y cuando, vamos a indicarle lo que se va a ejecutar.

En primer lugar por tanto, creamos la función crear_post_type:

function crear_post_type() { }

De esta forma le decimos a WordPress lo que tiene que hacer, es decir registrar un nuevo tipo de post, que llamaremos entrevistas:

 register_post_type('entrevistas');

Quedando finalmente de la siguiente manera:

function crear_post_type() { register_post_type('entrevistas'); }

Esto por sí mismo no hace nada, ya que nos faltan los Argumentos, que le vamos a indicar a register_post_type mediante la variable $args.

Hay múltiples Argumentos para register_post_type, pero uno de los más importantes, e imprescindible son las Etiquetas, labels.

Teniendo en cuenta que labels no es sino un argumento más, irá dentro de $args, y quedará la expresión montada de la siguiente manera:

function crear_post_type() { 
    register_post_type('entrevistas', $args); 
}

Etiquetas, Argumentos, Arrays, Variables

Hay muchísimas labels y otros tantos args, por lo que revisaremos los más importantes. En el Codex de WordPress hay un listado completo de referencia sobre register_post_type.

Vamos con las etiquetas. Como son varias las meteremos dentro de un array. Un array en PHP es en realidad un mapa ordenado. Un mapa es un tipo de datos que asocia valores con claves.

Además, asignaremos una variable a nuestro array. Una variable es como un contenedor en el que metemos información, para invocar a través de esa variable toda la información cuando lo necesitemos. Las variables se indican precedidas por el signo $.

Aquí tenemos nuestro array, vacío de claves variables dentro de nuestra variable $labels. 

$labels = array ( );

Ahora introduciremos en el array todas las etiquetas que necesita WordPress para funcionar. Para ello le damos valores por ejemplo ‘Entrevistas’ a claves por ejemplo ‘name’:

 $labels = array(
  'name' =>('Entrevistas'),
  'singular_name' =>('Entrevista'),
  'all_items' =>('Todas las entrevistas'),
  'add_new' =>('Añadir nueva'),
  'add_new_item' =>('Añadir nueva entrevista'),
  'edit_item' =>('Editar entrevista'),
  'new_item' =>('Nueva entrevista'),
  'view_item' =>('Ver entrevista'),
  'search_items' =>('Buscar entrevistas'),
  'not_found' =>('No se han encontrado entrevistas'),
  'not_found_in_trash' =>('No hay entrevistas en la papelera'),
  'parent_item_colon' => ''
 );

Para no hacer las cosas a lo loco, es importante no limitarse a copiar y pegar. En el Códex de WordPress tenemos una descripción completa de todas las labels disponibles y lo que es cada una. Como os podéis imaginar, estas labels  lo que hacen es definir el nombre de los ítems que vamos a ver en el panel de control de WordPress.

Listado de etiquetas de register_post_type

Listado de etiquetas de register_post_type

Seguimos avanzando. Ya tenemos las etiquetas o labels. Vamos ahora con los argumentos, el procedimiento es el mismo, vamos a crear una variable $args que contendrá el array con los argumentos que necesita register_post_type para realizar su función.

$args = array ( );

Y ahora el mismo procedimiento que antes, poblamos el array. Si nos fijamos aquí en el primer argumento vemos que es ‘labels’ y que le asignamos la variable $labels.

$args = array( 
 'labels' => $labels,

Sí, eso es, le hemos pasado a la variable de argumentos, toda la información de etiquetas que hemos montado en el array de labels. ¿Limpio y elegante verdad?.

Todo el array quedaría así:

$args = array( 
 'labels' => $labels,
 'public' => true,
 'publicly_queryable' => true,
 'show_ui' => true,
 'query_var' => true,
 'rewrite' => true,
 'capability_type' => 'post',
 'hierarchical' => false,
 'menu_position' => 5,
 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
 );

No voy a entrar en detalles de lo que hace cada clave, porque este artículo se nos escapa ya de las manos en extensión, pero sí que recomiendo leer el Códex de WordPress donde tenemos una descripción completa de todos los argumentos. Como curiosidad simplemente, ‘menu_position’ indica la ubicación de nuestro Custom Post Type dentro de la barra de menú del panel de control de WordPress.

Ubicando el Custom Post Type dentro del Backend de WordPress

Ubicando el Custom Post Type dentro del Backend de WordPress

Finalizamos los trabajos con functions.php

Llegados a este punto, toca montar todos los fragmentos de código que hemos explicado paso por paso.

Lo que vamos a hacer es coger las variables $labels $args con sus correspondientes arrays, y los vamos a montar dentro de la función. Observa que al final de la función, cuando hacemos el register_post_type, definimos el nombre del tipo de post y los $args que deseamos. Recuerda también que $labels va encapsulado dentro de $args. De esta forma WordPress ya tiene todo lo que necesita para montar un nuevo Custom Post Type.

add_action ('init', 'crear_post_type');function crear_post_type()  { 
    $labels = array(
     'name' =>('Entrevistas'),
     'singular_name' =>('Entrevista'),
     'all_items' =>('Todas las entrevistas'),
     'add_new' =>('Añadir nueva'),
     'add_new_item' =>('Añadir nueva entrevista'),
     'edit_item' =>('Editar entrevista'),
     'new_item' =>('Nueva entrevista'),
     'view_item' =>('Ver entrevista'),
     'search_items' =>('Buscar entrevistas'),
     'not_found' =>('No se han encontrado entrevistas'),
     'not_found_in_trash' =>('No hay entrevistas eliminadas'),
     'parent_item_colon' => ''
    );

    $args = array( 
     'labels' => $labels,
     'public' => true,
     'publicly_queryable' => true,
     'show_ui' => true,
     'query_var' => true,
     'rewrite' => true,
     'capability_type' => 'post',
     'hierarchical' => false,
     'menu_position' => 5,
     'supports' => array('title', 'editor', 'author', 'thumbnail'     ,'excerpt','comments')
    );
    register_post_type('entrevistas', $args); 
  }

A partir de ahora cuando entremos en el panel de control, veremos algo parecido a esto:

Custom Post Type desplegado en el Backend de WordPress

Custom Post Type desplegado en el Backend de WordPress

Custom Post Type desplegado en el Backend de WordPress

Todo listo para trabajar con nuestro nuevo Custom Post Type :D

Espero que os resultara interesante. En el próximo artículo veremos como finalizar nuestros Custom Post Types, asignando una plantilla específica.

NOTA: Atención, esto es muy importante: Hay que volver a salvar la estructura de permalinks antes de que un Custom Post Type funcione correctamente. Para ello hay que ir a Ajustes / Enlaces Permanentes y sin tocar nada, darla a “Guardar Cambios”. ¡Voilà!

Share on FacebookTweet about this on TwitterPin on PinterestShare on LinkedInShare on Google+

12 Comentarios

  1. giuli
  2. yaser7
  3. Gus
  4. Keiner
  5. susana

Deja un comentario