Son vacaciones y mientras escribía ayer sobre como crear un child theme, me dio la necesidad de escribir ahora sobre como crear un Custom Post Type en WordPress sin necesidad de plugins, esto es algo poderoso dentro del ecosistema de WordPress. ¿no me crees?, veamos por que.
¿Por qué usar un Custom Post Types?
Debes entender que en WordPress el contenido se organiza principamente en posts (entradas) y pages (páginas). Sin embargo, cuando el proyecto crece, esto ya no puede seguir manteniéndose en un simple wordpress, sino que necesitas más control, y la necesidad de segmentar tu información por ejemplo agregar secciones exclusivas de proyectos, testimonios, cursos, portafolios, casos de estudio, etc.
Y es ahí donde entran los Custom Post Types (CPT): tipos de contenido personalizados que amplían las capacidades de WordPress sin alterar su estructura interna. Por ese motivo, te enseñaré a como registrar un CPT desde cero, sin plugins, directamente de tu child theme, que si leíste el post anterior te diste cuenta que lo hicimos a través de la plantilla Twenty Twenty-Five , siguiendo la lógica y continuidad de estos temas de WordPress Avanzado, comencemos.
Requisitos previos
Antes de comenzar este pequeño tutorial, debes de tener lo siguiente:
- WordPress instalado y funcionando.
- Un tema hijo basado en la plantilla que gustes.
- Archivos style.css y functions.php correctamente configurados (tal como el post anterior).
Paso 1: ¿Dónde registrar el Custom Post Type?
Vamos a trabajar directamente en el archivo functions.php del tema hijo, ya que es la forma más directa y práctica de registrar un CPT sin utilizar plugins. Pero antes de que lo hagamos, quiero que veas como se ve nuestro panel de gestión de WordPress ahora mismo:

Ahora si, nos vamos a dirigir a nuestra ruta del archivo:
/wp-content/themes/twentytwentyfive-child/functions.php
Este Custom Post Type lo usaremos como ejemplo a lo largo de nuestros próximos tutoriales de WordPress Avanzado, vamos a pegar este código justo debajo del último código PHP que hicimos cuando creamos nuestro child theme o "tema hijo".
<?php
// Evita el acceso directo al archivo
if ( ! defined( 'ABSPATH' ) ) exit;
/**
* Registrar Custom Post Type: Manuales
*/
function cjm_registrar_cpt_manuales() {
$labels = array(
'name' => 'Manuales',
'singular_name' => 'Manual',
'menu_name' => 'Manuales',
'name_admin_bar' => 'Manual',
'add_new' => 'Añadir nuevo',
'add_new_item' => 'Añadir nuevo manual',
'new_item' => 'Nuevo manual',
'edit_item' => 'Editar manual',
'view_item' => 'Ver manual',
'all_items' => 'Todos los manuales',
'search_items' => 'Buscar manuales',
'not_found' => 'No se encontraron manuales',
'not_found_in_trash' => 'No hay manuales en la papelera'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'manuales' ),
'show_in_rest' => true, // Permite usar el editor de bloques
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields' ),
'menu_icon' => 'dashicons-book',
);
register_post_type( 'manuales', $args );
}
add_action( 'init', 'cjm_registrar_cpt_manuales' );
Por si tienes dudas, lo pegamos justamente así:

Notas importantes:
cjm_registrar_cpt_manuales
es el nombre que yo le dí a mi función (tu lo puedes cambiar).register_post_type()
es la función principal para declarar un CPT.show_in_rest => true
asegura compatibilidad con el editor de bloques (Gutenberg).rewrite => ['slug' => 'manuales']
define la URL amigable.menu_icon
puede cambiarse según tus necesidades (Ver lista de dashicons).
add_action( 'init', 'cjm_registrar_cpt_manuales' );
Paso 3: Regenerar enlaces permanentes
Después de guardar el código, ve a:
Ajustes → Enlaces permanentes → Guardar cambios (sin cambiar nada).
👉 Esto fuerza a WordPress a registrar las nuevas reglas de URLs para el CPT.

Paso 4: Verifica que todo esté funcionando
- En el escritorio de WordPress, deberá aparecer un nuevo menú llamado Manuales
- Crearemos uno y probaremos con contenido de prueba.
- Visita la URL
tusitioweb.com/manuales
para ver el archivo del CPT
Si todo está bien, verás el listado de manuales como si fueran posts tradicionales.
Observamos que ciertamente, aparece un nuevo menú llamado Manuales

Creamos uno con contenido de prueba y veamos que sucede.

Pondremos de Título: "Soy el primer manual" y en contenido de prueba "Aquí encontrarás información sobre WordPress Avanzado", no te olvide de darle click en "Publicar".

Y si todo está bien, verás el listado de manuales (aquí agregamos uno, yo te sugiero agregar 3 o más).

¡Listo!, aprendiste a crear tu primer Custom Post Type (CPT), sin problemas. Aunque ahora te podrás dar cuenta que nuestro CPT, no tiene diseño propio, ni tampoco un template especial, es decir una plantilla personalizada. Y es lo que veremos en nuestro siguiente post, así como las taxonomías personalizadas asociadas a los manuales, campos personalizados con meta boxes, consultas avanzadas con WP_Query para mostrar los manuales en otras partes del sitio y al final shortcodes reutilizables para insertar listados de CPTs donde quieras.
Conclusión
Registrar un Custom Post Type sin plugins es un paso obligatorio para cualquier desarrollador WordPress que esté buscando profesionalizar sus proyectos, evitar sobrecargar la instalación con extensiones innecesarias. Al hacerlo desde tu tema hijo, garantizas portabilidad, control, y coherencia en el código fuente, totalmente listo para escalar tu proyecto.
Espero que te haya servido, un gusto y un abrazo. 🤓🚀
Deja una respuesta
Estos temas te pueden interesar