Cómo usar Custom Post Types para estructurar WordPress

Cuando un sitio en WordPress crece más allá de entradas y páginas sueltas, meter todo dentro de «Posts» empieza a dar problemas: destinos de viaje mezclados con artículos de blog, fichas de producto compitiendo por las mismas categorías que las noticias. Los Custom Post Types (CPT) existen justo para esto, para darle a cada tipo de contenido su propio espacio, sus propios campos y su propia forma de mostrarse.

Qué es un Custom Post Type

Por defecto, WordPress solo trae dos tipos de contenido: entradas y páginas. Un CPT es un tercer tipo, definido a medida, que se comporta como cualquiera de los otros dos (aparece en el panel, se puede editar, indexar y enlazar) pero con su propia identidad. Una agencia de viajes podría crear un CPT «Destinos» para cada lugar que ofrece, o un sitio de reseñas uno llamado «Películas» para cada crítica, sin que ese contenido se mezcle con las entradas normales del blog.

Por qué merece la pena usarlos

Separar el contenido por tipo trae ventajas que se notan a medida que el sitio crece. La organización mejora, porque cada cosa vive donde le corresponde en vez de amontonarse en el mismo listado de entradas. La presentación gana flexibilidad, ya que cada CPT admite su propia plantilla y sus propios campos, sin forzar a todo el contenido a usar el mismo diseño. El SEO también sale beneficiado, porque un contenido bien tipificado facilita que los buscadores entiendan de qué trata cada página. Y a largo plazo, añadir un tipo de contenido nuevo no obliga a tocar ni reorganizar lo que ya funciona.

Cómo registrar un CPT paso a paso

El método más directo es añadir el registro en el functions.php de tu tema (o, mejor aún, en un plugin propio para que sobreviva a un cambio de tema). Este ejemplo crea un CPT llamado «Destinos»:

function crear_tipo_publicacion_destinos() {
    $args = array(
        'labels' => array(
            'name' => 'Destinos',
            'singular_name' => 'Destino',
            'add_new_item' => 'Añadir nuevo destino',
            'edit_item' => 'Editar destino',
            'search_items' => 'Buscar destinos',
        ),
        'public' => true,
        'has_archive' => true,
        'show_in_rest' => true, // imprescindible para Gutenberg y la REST API
        'supports' => array('title', 'editor', 'thumbnail', 'custom-fields'),
        'rewrite' => array('slug' => 'destinos'),
    );
    register_post_type('destinos', $args);
}
add_action('init', 'crear_tipo_publicacion_destinos');

En cuanto guardes el archivo, aparecerá una nueva sección «Destinos» en el menú lateral del panel de administración, con su propio listado y su propio formulario de creación. El parámetro show_in_rest es el que más se olvida y el que más dolores de cabeza da si falta: sin él, el CPT no aparece en el editor de bloques ni es accesible desde la REST API.

Llevarlo más allá: plantillas, campos y taxonomías

Plantillas propias para cada CPT

WordPress busca automáticamente archivos con el nombre del CPT. Para el ejemplo anterior, single-destinos.php controla cómo se ve un destino individual y archive-destinos.php el listado completo. Si no creas esos archivos, WordPress recurre a las plantillas genéricas del tema, que rara vez encajan bien con un contenido tan específico.

Campos personalizados para los datos que no son texto libre

Un destino turístico necesita cosas como precio orientativo, mejor época para viajar o coordenadas, datos que no encajan en el editor de contenido normal. Puedes añadirlos con los campos personalizados nativos de WordPress o, si buscas una interfaz más cómoda de gestionar, con un plugin como Advanced Custom Fields (ACF), que permite definir esos campos de forma visual y asignarlos solo al CPT que corresponda.

Taxonomías propias en lugar de categorías genéricas

Si necesitas clasificar los destinos por tipo (playa, montaña, ciudad), lo lógico no es reutilizar las categorías del blog, sino crear una taxonomía propia:

function crear_taxonomia_destinos() {
    $args = array(
        'hierarchical' => true,
        'labels' => array(
            'name' => 'Tipos de destino',
            'singular_name' => 'Tipo de destino',
        ),
        'show_ui' => true,
        'show_in_rest' => true,
    );
    register_taxonomy('tipo_destino', 'destinos', $args);
}
add_action('init', 'crear_taxonomia_destinos');

Así cada CPT tiene su propio sistema de clasificación, sin arrastrar ni contaminar las categorías y etiquetas que usa el resto del sitio.

Si combinas los CPT con bloques de Gutenberg personalizados para mostrar esos campos, el resultado gana en flexibilidad visual sin sacrificar rendimiento; este repaso de componentes dinámicos con bloques de Gutenberg explica cómo montar esa parte. Y si el proyecto va a crecer con varios CPT y taxonomías cruzadas, conviene planificar la estructura desde el principio: esta guía sobre arquitecturas de contenido escalables en WordPress cubre justo ese punto de partida. Si además planeas consumir esos CPT desde un frontend separado, activar show_in_rest es el primer paso hacia un enfoque headless, donde WordPress se limita a gestionar el contenido y otra capa se encarga de mostrarlo.

Preguntas frecuentes

¿Puedo crear un CPT sin tocar código?

Sí, plugins como Custom Post Type UI permiten registrar tipos de contenido y taxonomías desde el panel de administración, sin escribir PHP. El resultado es equivalente al código manual, aunque tienes menos control fino sobre parámetros avanzados.

¿Qué pasa si desactivo el plugin o tema donde registré el CPT?

El contenido no desaparece de la base de datos, pero deja de mostrarse y de ser editable hasta que registres de nuevo ese mismo post type. Por eso conviene registrar los CPT en un plugin propio en vez de en el tema: sobrevive a un cambio de diseño.

¿Los CPT afectan al SEO igual que las entradas normales?

Sí, siempre que public esté activado: se indexan, admiten metadatos de Rank Math y generan su propia URL. La ventaja es que, al estar bien tipificados, resulta más fácil trabajar el SEO de cada tipo de contenido por separado.

¿Cuándo NO conviene crear un CPT nuevo?

Cuando el contenido en realidad encaja bien en entradas normales con una categoría específica. Crear un CPT tiene sentido cuando el contenido necesita campos, plantilla o lógica propia; si solo necesitas agrupar temas, una categoría o etiqueta resuelve lo mismo con menos complejidad.

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.