Cómo crear un Custom Post Type en WordPress

Por defecto, WordPress incorpora una serie de post types (tipos de contenido) para publicar desde entradas hasta contenidos multimedia, pero, ¿qué pasa si quieres añadir un nuevo tipo de contenido? En este caso, deberás saber cómo crear un Custom Post Type en WordPress.

Y es eso lo que quiero enseñarte en esta entrada, a que aprendas cómo crear un Custom Post Type en WordPress por ti mismo. Como ya habrás podido averiguar, Custom Post Type viene del inglés «Tipo de contenido personalizado». Los post type que vienen en WordPress de serie son los siguientes:

Crear un Custom Post Type en WordPress

Post (entrada)

Es el tipo de contenido más común en WordPress, correspondiendo a las entradas que se muestran en el blog, de forma cronológica inversa (primero la más reciente). Permiten la asociación con categorías y etiquetas (tags).

Page (página)

Similar a una entrada (post), pero con la diferencia de que las páginas no se muestran en el blog, sino que para acceder a ellas deberás añadirla a tu menú o escribir su URL en el navegador. Tampoco se pueden asociar con categorías ni etiquetas.

Otra característica de las páginas es que estas se pueden organizar por jerarquías, es decir, que una página dependa de otra (padre). De esta forma, si miras la URL de una página hija, podrás ver que delante tiene la página padre (Ej: «www.tusitioweb.com/pagina-padre/pagina-hija»).

Attachment (medio)

Este tipo de contenido corresponde a todo lo que subes a tu WordPress a través del apartado «Medios». Ya sea una imagen, un vídeo o un archivo en PDF, todo quedará almacenado bajo el post type attachment.

Revision (revisión)

Una revisión sirve para guardar copias más antiguas de entradas y páginas. Hace como una especie de «control de versiones», permitiéndote recuperar una copia de cualquier entrada en caso de que la necesites.

Navigation menu (menú de navegación)

Es un post type que contiene la información de un enlace del menú de tu web en WordPress.

Custom CSS (CSS personalizado)

Se trata de un post type específico del tema que estés utilizando en ese momento. Este tipo de contenido es guardado en la base de datos desde la pantalla del personalizador de CSS del tema. Aunque cada tema puede guardar su propio CSS, solo se mostrará el correspondiente al que tengas activo.

Changesets (conjuntos de cambios)

Son muy parecidos a los auto-guardados, pero específicos del personalizador. En caso de que cierres el navegador por error sin haber guardado los cambios, WordPress intentará recuperar dichos cambios, pero solo para el personalizador.

Bien, hasta aquí has podido ver los post types (tipos de contenido) que trae WordPress por defecto en su core. Si tienes alguna duda, te animo a que la escribas en los comentarios del artículo.

Ahora, imagina que quieres crear un nuevo tipo de contenido para WordPress, ya que los que vienen de serie no te valen (es el caso de Woocommerce, que al instalarlo crea el Custom Post Type «Products», para guardar la información referente a los productos que se muestran en la tienda).

En el ejemplo que voy a poner para que aprendas cómo crear un Custom Post Type en WordPress, lo que se van a almacenar son razas de perros. Para ello, vas a seguir los siguientes pasos:

Definir la función

Para crear un Custom Post Type en WordPress, lo primero que deberás hacer es definir una función que lo cree. Como cada función que desarrolles, deberá tener un nombre único que no coincida con ninguna otra función del sistema. De lo contrario, entrará en conflicto.

En nuestro ejemplo, la función se va a llamar jmc87_add_dogs_post_type. Esa función tendrás que cargarla en el core de WordPress mediante un hook. En este caso, te recomiendo que utilices el hook «init», para que se cargue al inicializar la web. De esta forma, el hook quedaría así: add_action( 'init', 'jmc87_add_dogs_post_type' );.

¿Dónde defines la función?

Hay dos posibles sitios donde puedes definir la función dentro de tu instalación de WordPress: el archivo «functions.php» de tu tema o un plugin que desarrolles tú mismo. Personalmente, te recomiendo utilizar un plugin de funciones. De esta forma, si cambias de tema, no perderás tu Custom Post Type.

Si te decides por el archivo «functions.php», hazlo solo si estás usando un child-theme en tu web. De lo contrario, cada vez que actualices tu tema, todas las funciones que hayas creado se borrarán.

La función «register_post_type()»

Como su propio nombre indica, esta función es la encargada de crear un Custom Post Type en WordPress. La misma recibe dos parámetros: el nuevo tipo de contenido (que no deberá tener una longitud superior a 20 caracteres, los cuales no podrán ser mayúsculas ni espacios) y un array de argumentos para personalizarlo.

Dicho array, permite una serie de personalizaciones para hacer que el Custom Post Type de diferencie del resto de tipos de contenido de la web. Por defecto, si no especificas ningún argumento, tomará los valores del post type «entrada».

Crear un Custom Post Type en WordPress

Labels

Siguiendo con el ejemplo de crear un Custom Post Type en WordPress para almacenar razas de perro, define el array de argumentos. Dentro de dicho array, vas a definir el parámetro «labels», encargado de los textos del Custom Post Type, y le asignas como valor otro array en el que puedes poner el nombre del Custom Post Type (tanto en singular como en plural), el texto de los botones, el texto de los enlaces,…

Public

El siguiente argumento del array principal, será el parámetro «public», el cual definirá la visibilidad del Custom Post Type para los autores y los lectores. En este ejemplo, el valor de este parámetro será «true».

Menu position

A continuación, voy a indicar, para el ejemplo, la posición del menú en la que quiero que aparezca, mediante el parámetro «menu_position». En este caso, va a aparecer debajo de los comentarios, por lo que el parámetro tendrá el valor «25».

Rewrite

Para terminar de crear un Custom Post Type en WordPress, vas a definir otro array debajo del parámetro anterior, como valor del parámetro «rewrite», el cual se encarga de reescribir las reglas de la URL. Este nuevo array contendrá el parámetro «slug», al cual se le asignará el valor del enlace amigable (en el ejemplo, «dogs»).

De esta forma, en la barra de direcciones aparecerá así (recuerda que en el ejemplo se definía un Custom Post Type para almacenar razas de perro): www.tusitioweb.com/dogs/pastor-aleman

Arreglando el error 404

Puede, que cuando intentes abrir la URL con tu nuevo Custom Post Type, aparezca un error 404. Para solucionarlo, tan solo tienes que añadir, debajo de la función «add_action()», la función «flush_rewrite_rules()». Sin embargo, ten en cuenta que esta función hace que la web vaya más lenta, así que procura utilizarla solo en caso de que sea necesario.

Código de ejemplo

Aquí, puedes ver como quedaría el código de la función que has ido desarrollando, con la ayuda de estos pasos, para crear un Custom Post Type en WordPress.

Recuerda que tú puedes utilizar los parámetros de personalización que desees. En este enlace, podrás ver todos los argumentos que soporta el array, para que personalices el Custom Post Type todo lo que tú quieras.

Conclusión

Como has podido ver a lo largo de este artículo, es posible crear un Custom Post Type en WordPress, si necesitas añadir un nuevo tipo de contenido que no viene de serie en el CMS. Aunque en el ejemplo haya utilizado uno para razas de perros, las posibilidades son infinitas (libros, vehículos, marcas, muebles, discos, ordenadores,…).

Ahora te toca a ti. Es tu turno de ponerte manos a la obra y crear tu propio Custom Post Type. Y recuerda, que si necesitas ayuda, siempre puedes escribirme un mensaje a través del formulario de contacto. Estaré encantado de ayudarte.

2 thoughts on “Cómo crear un Custom Post Type en WordPress

    • Buenas Rodrigo.

      Muchas gracias por tu comentario. Para crear las plantillas de tu CPT (archive y single), lo que tienes que hacer es lo siguiente: suponiendo que tienes un CPT llamado «dogs», debes crear dentro de tu tema los archivos «archive-dogs.php» y «single-dogs.php». Dentro de estos archivos, podrás crear la estructura HTML que desees para las páginas de tu CPT, así como insertar las funciones de WP necesarias para su correcta visualización.

      Otra opción, por si no quieres hacerlo desde el tema y prefieres tenerlo todo montado en un plugin, es utilizar los hooks «add_filter( ‘archive_template’, ‘get_post_type_templates’ )» y «add_filter( ‘single_template’, ‘get_post_type_templates’ )», donde «get_post_type_templates» es la función que hace la llamada a las plantillas para renderizar las páginas del CPT. Te dejo un enlace con un ejemplo, para que lo veas mejor: https://github.com/juanmacivico87/plugin-sample/blob/master/src/customPostsTypes/samplePostType/sample-post-type.php

      Espero haber resuelto tu duda. Si hay alguna otra cosa en la que te pueda ayudar, no dudes en escribirme.

      Un saludo y feliz viernes.

Leave a Comment