Una de las cosas que más valoro de WordPress como CMS (o gestor de contenidos) es su escalabilidad, es decir, su capacidad para adaptarse al crecimiento de nuestra web sin tener que cambiar a otros gestores más específicos. Una de las opciones que permite extender las funcionalidades base del Core y adaptar WordPress a nuestro proyecto es sin duda los Custom Post Types (CPT) o Tipos de Entradas personalizadas.
Un Custom Post Type no es otra cosa que un nuevo tipo de entrada que agregamos a nuestro WordPress con el objetivo de gestionar sus contenidos de forma independiente de las páginas y los posts normales del blog. De esta forma podemos tener diferentes secciones en nuestra web con contenidos que se van actualizando de forma independiente.
¿Que es un Custom Post Type en WordPress?
Un ejemplo para entender mejor el uso de los Custom Post Type, imaginemos una web sobre críticas de libros:
- Tendríamos una sección dedicada al blog, donde escribiríamos sobre noticias, nuevos lanzamientos de libros, presentaciones, entrevista a los autores…todo ello iría en el apartado entradas.
- Existirían una serie de páginas estáticas con la información sobre el sitio, una página de contacto, política de privacidad, servicios, publicidad…en definitiva, contenido que no va a cambiar y que ubicaremos en el menú de navegación. Todos estos contenidos irían en Páginas.
- Las críticas y reviews de los libros, con calificaciones y recomendaciones sobre ellos. Igual también necesitamos poder filtrarlas por temática o autores, y por supuesto un buscador. Todo ello irá en un nuevo Tipo de Entrada Personalizada que llamaremos Libros
WordPress nos provee por defecto de los dos primeros tipos de contenido (entradas y páginas), pero si queremos ampliar el catálogo, tendremos que utilizar plugins o código personalizado para lograrlo. Otros ejemplos que pueden servir para ilustrar el uso de los CPT son los productos en una tienda online (de hecho WooCommerce crea un Custom Post Type al instalarse para gestionar los productos), películas, portfolio, testimonios, servicios…puedes crear tantos tipos de entradas personalizados como necesites.
Cómo crear un Custom Post Type
Vamos a ver las opciones que tenemos a la hora de crear un Custom Post Type en WordPress. Antes de seguir es importante tener claro una cuestión: al tratarse de una funcionalidad que vamos a añadir, esta deberá ir siempre en forma de plugin, para poder cambiar libremente de tema sin perder los contenidos del nuevo tipo de entrada personalizada. Los CPT son territorio plugin y no debe invadirse dicho territorio desde el tema WordPress (ya sea a través del tema padre o del tema hijo).
Plugins para crear Custom Post Types
Hemos recopilado varias opciones que nos facilitan la vida en la creación y edición de estos tipos de entradas personalizadas a través de plugins.
Pods es un plugin muy completo que permite (entre otras muchas opciones) crear un CPT en un par de clics. Además podemos extender las opciones de los otros tipos de entradas y añadir taxonomías (como categorías y etiquetas) a los nuevos tipos de entradas.
WCK, un plugin también muy completo, con opción a crear, editar y modificar los tipos de entradas, además de poder añadir campos personalizados (continuando con la web sobre crítica de libros, los campos personalizados serían Autor, año de edición, editorial…)
Custom Post Type Generator, más ligero y sencillo que los anteriores, nos permite crear los Custom Post Type en un par de clics y sin demasiadas complicaciones. Si ya sabemos lo que necesitamos y tenemos claro que no vamos a extender funcionalidades ni necesitar taxonomías, este es nuestro plugin.
Tipos de entradas personalizadas en Jetpack
Aunque muy limitado, Jetpack ofrece la opción de activar dos tipos de entradas nuevos, portfolio y testimonios. Tan solo tendremos que navegar en las settings a las opciones de escritura, y activar el tipo de entrada que necesitemos. Por ahora solo tenemos disponible estas dos opciones, peor si tu proyecto requiere de ellas y ya estás usando en plugin Jetpack para otras funcionalidades, ¿qué necesidad hay de instalar un plugin nuevo?
Además de estos dos tipos de entradas, realizando algunos ajustes en nuestro tema (si es en nuestro tema hijo mucho mejor) tenemos la opción de activar un par de tipos de entradas más: Food menu y Comics, para ello deberás añadir el soporte a los mismos en tu tema según la documentación.
Código a medida para crear CPT
Si no tienes miedo a tocar algo de PHP y aprender de caminos cosas nuevas sobre WordPress, entonces vamos a repasar cómo crear un Custom Post Type desde cero. En el siguiente ejemplo vamos a registrar un nuevo tipo de entrada personalizada para organizar nuestros libros, con las siguientes opciones:
add_action( 'init', 'register_book' );
/**
* Register a book post type.
*
* @link http://codex.wordpress.org/Function_Reference/register_post_type
*/
function register_book() {
$labels = array(
'name' => _x( 'Books', 'post type general name', 'silocreativo' ),
'singular_name' => _x( 'Book', 'post type singular name', 'silocreativo' ),
'menu_name' => _x( 'Books', 'admin menu', 'silocreativo' ),
'name_admin_bar' => _x( 'Book', 'add new on admin bar', 'silocreativo' ),
'add_new' => _x( 'Add New', 'book', 'silocreativo' ),
'add_new_item' => __( 'Add New Book', 'silocreativo' ),
'new_item' => __( 'New Book', 'silocreativo' ),
'edit_item' => __( 'Edit Book', 'silocreativo' ),
'view_item' => __( 'View Book', 'silocreativo' ),
'all_items' => __( 'All Books', 'silocreativo' ),
'search_items' => __( 'Search Books', 'silocreativo' ),
'parent_item_colon' => __( 'Parent Books:', 'silocreativo' ),
'not_found' => __( 'No books found.', 'silocreativo' ),
'not_found_in_trash' => __( 'No books found in Trash.', 'silocreativo' )
);
$args = array(
'labels' => $labels,
'description' => __( 'Description.', 'silocreativo' ),
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'book' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
);
register_post_type( 'book', $args );
}
Algunos comentarios interesantes:
'rewrite' => array( 'slug' => 'book' )
: nos permite customizar la url donde aparecerán los libros. Por tanto, en este ejemplo, todos los títulos que añadamos estarán bajo el paraguas de /book/ en la url. Por ejemplo: misitioweb.com/book/los-pilares-de-la-tierra'menu_position' => 5
: gestiona la posición del nuevo elemento añadido dentro de la barra lateral del área de administración de WordPress'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
: aquí es donde se definen que elementos que van a estar disponibles en este nuevo tipo de entrada: título, editor, selector de autor, imagen destacada…
El resto de opciones definen las variables disponibles, puedes leer más en el codex. Importante sustituir «silocreativo» por el text-domain que utilices para tu tema (o plugin) para la traducción. Si va a ser en un único idioma, puedes editar los textos directamente sin pasar por los archivos de traducción.
Generador de código para Tipos de entradas personalizadas
Si vas a añadir tu propio código a través de un plugin, pero no quieres complicarte la vida, también puedes optar por generar el código necesario a través de GenerateWP. Con esta herramienta podemos ir introduciendo la información a modo de cuestionario y en la parte interior se nos irá generando el código necesario, perfecto si es la primera vez que tratas de crear un Custom Post Type o si quieres repasar conceptos.
Aunque el funcionamiento es bueno, siempre es bueno repasar el código resultante por si algún parámetros no está bien establecido.
Y tu, ¿conocías ya los CPT? ¿para que los utilizas? Espero que haya sido de ayuda el artículo 🙂
Realizar Custom Posts definitivamente abre muchas puertas en lo que viene a ser Diseño Web en WordPress. Los utilizo para todo, especialmente para el portafolio web.