A partir de la versión 3, en WordPress es posible crear distintos tipos de posts aparte de las entradas, páginas y menús. Si te has visto en la necesidad de crear otros tipos y no sabes cómo, te indicamos aquí como crear un custom post type en WordPress.
En WordPress, como ya sabéis, hay distintos tipos de posts nativos. Estos son los propios posts o entradas (como esta misma), las páginas de información, archivos adjuntos (imágenes y demás) y los elementos del menú. Todos estos elementos se almacenan en la misma tabla de la base de datos de WordPress, la tabla wp_posts. Dentro de esa tabla hay un campo llamado post_type el cual determina el tipo de contenido. Es decir, el campo indica si el registro es un artículo, es una página, es un archivo o bien es un menú. A menudo, en nuestro WordPress queremos diferenciar los contenidos que ofrecemos en él, y es posible que las categorías se nos queden cortas. Ahí es donde entran en juego los custom posts types, los tipos de posts personalizados que nosotros mismos podemos crear.
Imaginemos que tenemos que desarrollar una web en WordPress en la que hacemos reseñas de libros y también artículos de opinión sobre literatura en general. Queremos, para que el cliente se aclare mucho mejor, tener una sección para las entradas, donde irán los artículos de opinión, y otra para los libros, donde se escribirán las reseñas, en el menú lateral dentro del backoffice. También queremos que en la parte pública, el contenido de los libros y el de los artículos se muestre de manera distinta. Por supuesto, los artículos se escribirán dentro de la sección Entradas, pero, ¿qué hacemos con los libros? Para ello tendremos que hacer uso de los custom posts types. Pero, ¿cómo crear un custom post type en WordPress? Es muy sencillo…
Crear un custom post type
Con los custom posts types es posible crear todo lo que se te ocurra, desde una sección en la que alberguemos un registro de videojuegos, hasta nuestro propio portfolio. Volviendo al ejemplo que planteamos en el párrafo anterior, para crear un custom post type para las reseñas de libros que tendrá la web debemos editar el fichero functions.php dentro del directorio del theme que estemos utilizando. Es decir, tendremos que trastear con el código fuente de WordPress.
A continuación te dejamos el ejemplo de cómo crear un nuevo tipo llamado ‘Libros’. Este código lo incluiríamos dentro del archivo functions.php.
add_action('init', 'libro_register'); function libro_register() { $labels = array( 'name' => __( 'Libros' ), 'singular_name' => __( 'Libro' ), 'add_new' => __( 'Añadir Nuevo' ), 'add_new_item' => __( 'Añadir nuevo Libro' ), 'edit_item' => __( 'Editar Libro' ), 'new_item' => __( 'Nuevo Libro'), 'view_item' => __( 'Ver Libro'), 'search_items' => __( 'Buscar Libro'), 'not_found' => __('No se encontró nada'), 'not_found_in_trash' => __('No se encontró nada en la papelera'), 'parent_item_colon' => '' ); $args = array( 'labels' => $labels, 'menu_icon' => 'URLDELAIMAGEN', 'public' => true, 'rewrite' => true, 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => null, 'supports' => array('title','thumbnail','editor') ); register_post_type( 'libros' , $args ); }
Paso a explicaros este código paso a paso, para que todos, independientemente del nivel que tengamos programando, lo podáis entender. Como véis en el add_action(), indico a WordPress que al iniciarse se ejecute la función libro_register() que es la que utilizaremos para crear el custom post type para los libros.
Al final de la función de libro_register() veréis que se llama a la función de la que os hemos hablado antes: register_post_type() en la que indicamos que el nuevo tipo se llamará ‘libros’ y le pasamos unos parámetros dentro del array $args.
¿Para qué sirve cada argumento?
El array $args contiene los argumentos que se le pasarán a la función register_post_type() para indicarle cómo debe comportarse en nuestro WordPress. A continuación os explico para qué sirve cada uno de los argumentos:
- labels: En labels indicaremos los diferentes textos que se mostrarán dentro del backoffice. Para ello nos ayudamos de otro array que contiene todos los textos llamado $labels. Os aconsejo que copieis tal cual el array $labels (eso sí, cambiad los textos) para que no se os olvide ningún texto estático.
- menu_icon: La url de la imagen que queremos usar como icono. También podemos usar los de la librería Dashicons, mucho más adaptados al estilo de WordPress.
- public: Con el parámetro public indicaremos si queremos que el custom type post sea de acceso público o bien de uso interno. Si es de acceso público, lo dejaremos en true. Sin embargo si queremos que sea privado, lo dejaremos en false.
- rewrite: Se define si se va a hacer uso de los rewrites para generar permalinks en el contenido que generemos con este tipo de posts.
- hierarchical: Con este parámetro indicaremos a la función register_post_type() si este tipo de post se puede anidar. Para que me entendáis, las páginas de WordPress se pueden anidar indicando que una es hija de otra o viceversa. Por regla general, las entradas no suelen anidarse pero si necesitáis un contenido jerárquico, poned este parametro a true.
- menu_position: Con menu_position indicaremos qué posición queremos que tenga este custom post type dentro de las secciones del backoffice de WordPress.
- supports: Un array con los distintos campos que queremos que el editor de este tipo de posts incorpore. En nuestro caso le hemos indicado que queremos que aparezca el título, la imagen destacada y el editor de texto, por supuesto.
Cuando tengamos el archivo functions.php con nuestro código personalizado insertado, solo queda guardarlo y subirlo al FTP en la misma ubicación donde estaba antes. Al entrar en nuestro WordPress, veremos una nueva sección llamada ‘Libros’ con la que podremos interactuar como en cualquier otro tipo de post.
Esperamos que con este tutorial seas capaz de crear un custom post type por tu cuenta. De todas maneras, si te ha surgido alguna duda o no eres capaz de hacer algo de lo que hemos descrito aquí, por favor, coméntanoslo.