En el tutorial de hoy veremos qué son los Custom Post Types de WordPress, su uso, para qué deberíamos usarlos, cómo hacerlo y las mejores prácticas.
¿Qué son los Custom Post Types (CPT)?
Cuando WordPress empezó, sólo existían los "posts". Nada más. No había páginas, sólo posts, porque WordPress sólo servía para hacer blogs.
Pero con el tiempo sus desarrolladores vieron clarísimo que necesitábamos ir más allá. Y crearon las "Páginas", que son una "especie de post", o por decirlo de otra forma, un "tipo de post". De ahí le viene lo de "Post Type". Seguramente hubiera tenido más sentido llamarle "Content Type", o sea, "Tipo de contenido", pero así quedó.
Las páginas pues, son como posts, con algunas diferencias. Por ejemplo, no tienen fecha, ni categorías ni etiquetas. Si queréis saber más podéis leer el tutorial Diferencias entre posts y páginas en WordPress, en el que lo cuento con más detalle.
Así pues, ya teníamos Posts y Páginas (tipo de post). Pero la verdadera revolución llegó con WordPress 3.5, que trajo los "Custom Post Types". ¿Y de que se trata? Pues ni más ni menos que de la posibilidad de crear tus propios tipos de post. Con otras palabras, "Tipos de Posts Personalizados".
Y eso es lo que son los CPT: Nuevos contenidos que podemos agregar a WordPress, además de las Entradas (posts) y las Páginas (post types).
Ejemplos de Custom Post Types (CPTs)
Un ejemplo de CPT serían los "Productos" de un eCommerce. Si usáis WooCommerce, veréis el menú de "Productos" en el panel de control. Eso es un CPT. Pero podríamos poner cualquier otro tipo de contenido: Servicios, personas, películas, contactos, animales...
Por ejemplo, aquí podéis ver una captura de mi panel de control:

Custom Post Types que uso en boluda.com
Concretamente en mi caso, estoy utilizando 6 de ellos, hagamos un repaso:
- Noticias: Ahí publico noticias sobre Marketing Online.
- Páginas: Este campo ya viene por defecto en WordPress.
- Podcasts: Episodios de mis podcast de marketing online.
- Cursos: Mis cursos de marketing online y desarrollo web.
- Tutoriales: Tutoriales de marketing online y desarrollo web, como éste mismo.
- Descargas: Los productos y servicios que ofrezco en mi web.
Como podéis ver, todo vale en cuanto a CPTs. Audios, vídeos, artículos, cursos, servicios... Todo bien organizado.
Y quizás algunos os preguntaréis "¿Y no podrías usar categorías?" Lo que lleva a la siguiente pregunta... ¿Cuando vale la pena, hacer un CPT? Bien, me alegro que os hagáis esta pregunta.
¿Cuando vale la pena, hacer un CPT?
Si en alguna ocasión os habéis planteado la estructura de una web, seguramente en algún momento os habréis planteado qué categorías y etiquetas usar. O incluso si queréis usar categorías y etiquetas. O incluso si usar CPTs. ¿Cuándo debemos usar una cosa u otra?
La respuesta está en la similitud de esos CPTs con las páginas y entradas. Si comparten el mismo tipo de información o sistema de organización, no tiene sentido hacer CPTs.
Por ejemplo, yo podría "meter" los episodios de mi podcast como entradas. Pero los considero suficientemente "distintos" como para independizarlos. Los podcasts por ejemplo, tienen un campo personalizado en el que hay el MP3 del episodio. Ese campo no tiene sentido que esté en las "Entradas" o en las "Noticias", por ejemplo. De ahí que los tenga aparte.
O por ejemplo, mis servicios no tendría sentido que estuvieran dentro de una categoría llamada "servicios" en Entradas. De ahí que los tengo aparte, ya que tienen sus propios campos, como el precio, o el método de pago.
Además, eso me permite tener una estructura de enlaces impecable:
- Los cursos -> https://boluda.com/cursos/
- Los tutoriales -> https://boluda.com/tutoriales/
- Las noticias -> https://boluda.com/noticias/
En cambio, si fueran categorías de entradas, las URLs no serían tan bonitas, ya que deberían tener el directorio /categoria/ en medio. Tenéis más información sobre esto en el tutorial Ajustes de los enlaces permanentes de WordPress.
E incluso puedo maquetar de distinta forma cada página de archivo de cada CPT. Por ejemplo, aquí vemos los episodios del podcast:

Los episodios del podcast se muestran en fila
Y aquí la maquetación de los tutoriales, como este mismo, que estáis leyendo en estos momentos, en otro formato:

Los tutoriales se muestran en una cuadrícula
Así pues, yo aconsejo usar CPTs en lugar de categorías cuando la entidad del contenido sea suficientemente significativa como para independizarse.
Bien, supongamos pues, que habéis analizado vuestro caso y que queréis usar CPTs para algo en concreto. Ahora la pregunta clave es... ¿Y cómo creo un CPT?
Cómo crear un Custom Post Type
Hay varias formas de hacerlo, pero lo más normal es que sea a través de una de estas 3, ordenadas de más simple a más complejo:
A través de un plugin

CPT "Productos"
Hay plugins que tienen sus propios CPTs. Por ejemplo, WooCommerce.
Como ya sabéis, WooCommerce es un plugin de eCommerce para WordPress. Y como hemos dicho antes, cuando lo instalas te aparece el CPT "Productos" en el panel de control.
Esa es la forma más simple, ya que no tenemos que hacer nada, simplemente instalar y activar el plugin, y listos. Mágicamente ya tenemos ese CPT en nuestra instalación de WordPress. Fijémonos que es un plugin de eCommerce, que su finalidad no es crear CPTs en sí, sino que estos son sólo un efecto de los mismos. Pero tenemos otra opción.
A través de un plugin de creación de CPTs
Sí, correcto. Hay ciertos plugins que sirven para crear CPTs. Aunque hay muchos de ellos, yo recomiendo Custom Post Type UI, de la gente de WebDevStudios, que son unos cracks de WordPress. 100% recomendado.
Lo que hace este plugin es ni más ni menos que ofrecernos una interfaz gráfica a través de la cual podemos crear esos CPT para luego usarlos en nuestro día a día.

El plugin nos permite crear los CPTs desde el panel de control
O sea, que simplemente rellenando todas las opciones, podemos crear nuestros propios CPTs que se añadirán a nuestro WordPress y podremos usar en nuestro día a día para añadir contenido. Si queréis que os prepare un tutorial contando cómo hacerlo paso a paso me lo comentáis a través de la pestaña de soporte de la Intranet, y así lo haré.
Aunque este método es más flexible que el anterior, porque nosotros creamos y definimos el CPT según queremos (nombre, slug, propiedades, campos que soporta, si tiene archivos, si es visible, etc), no es mi favorito por varias razones.
- En primer lugar porque tenemos que tener ese plugin siempre instalado y activo para usar el CPT (si lo desinstalamos, el CPT desaparece).
- En segundo lugar, porque afecta al rendimiento de la web en sí, pues no deja de ser un plugin más en nuestra instalación, y todo suma.
- Y en tercer lugar, porque si dejamos ese menú a la vista, es muy probable que antes o después alguien lo acabe toqueteando, y probablemente, rompiendo algo (Ley de Murphy).
Y finalmente, la mejor opción. Mi favorita y la que siempre recomiendo, tanto para desarrolladores como para los "Juan Palomo" a los que nos gusta aprender y hacer las cosas lo mejor posible.
A través de código
Hacer un CPT por código es muy simple. En la clase de #4. Custom Post Types del curso de creación de plugins para WordPress lo podéis ver paso a paso a través de un videotutorial, y además os podéis descargar códigos de ejemplo. Pero para que os hagáis una idea, sólo bastaría con estas líneas:
add_action( 'init', 'crear_un_cpt' );
function crear_un_cpt() {
$args = array(
'public' => true,
'label' => 'Libros'
);
register_post_type( 'libro', $args );
}
Sólo con esto ya hemos creado un CPT llamado "Libros" que aparecerá en nuestro panel de control automáticamente, preparado para ser usado. No hace falta que hagamos nada más.
Evidentemente podemos complicarlo mucho más, e indicar muchas más opciones y ajustes, especialmente si lo queremos personalizar a nuestro gusto. Pero con estas pocas líneas bastaría para tenerlo en funcionamiento.
Importante: Los CPTs NO son cosa de themes
Llegados a este punto, quiero hacer un aviso importante: Los CPTs no son cosa de los themes. Repito: Los themes nunca deberían incluir CPTs. Eso es cosa de plugins.
Y soy muy radical en esta cuestión por un simple motivo: Lo que viene en un theme, se va con el theme. Eso quiere decir que si estamos usando CPTs que nos han venido con un theme, el día que cambiemos ese theme por otro (y creedme, antes o después pasará), esos CPTs van a desaparecer.
Os lo cuento en detalle en el tutorial WordPress themes VS plugins, y también en este vídeo que grabé hace más de un año (en el que por cierto, estaba muy resfriado):
Y es por eso por lo que nunca debemos fiarnos de themes que tengan funcionalidades, ni CPTs. A priori puede parecer muy bonito, pero a largo plazo es una decisión muy mala.
Resumen y conclusión
Los Custom Post Types son entidades de contenido personalizadas que podemos añadir a WordPress para organizar y estructurar mejor el contenido de nuestra web.
En ocasiones nos vienen dados a través de plugins y en ocasiones los creamos, ya sea a través de un plugin como a través de código. Nunca deberían venir con un theme.
Si queréis saber más os recomiendo el curso de creación de plugins, en el que vemos todo eso y mucho más, así como el curso de Custom Fields, que se complementa a la perfección con estos.
En fin, pues esto es todo. Para cualquier duda, pregunta o sugerencia, podéis contactar conmigo a través de la pestaña de soporte de la intranet. ¡Nos leemos en el siguiente tutorial!