Registrar un Custom Post Type

Php marzo 10, 2026

Los Custom Post Types (CPT) permiten crear nuevos tipos de contenido más allá de posts y páginas. Úsalos cuando necesites gestionar portfolios, productos, eventos, inmuebles o cualquier entidad que tenga sus propios campos y su propio archivo. Se definen en un plugin (nunca en el tema) para no perder el contenido al cambiar de diseño.

Casos de uso: portafolio de proyectos, catálogo de productos sin WooCommerce, directorio de profesionales, base de conocimiento.

<?php
function mi_plugin_register_cpt() {
    register_post_type( 'proyecto', array(
        'labels' => array(
            'name'          => 'Proyectos',
            'singular_name' => 'Proyecto',
            'add_new_item'  => 'Añadir proyecto',
            'edit_item'     => 'Editar proyecto',
            'all_items'     => 'Todos los proyectos',
            'not_found'     => 'No se encontraron proyectos',
        ),
        'public'       => true,
        'has_archive'  => true,
        'rewrite'      => array( 'slug' => 'proyectos' ),
        'supports'     => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
        'menu_icon'    => 'dashicons-portfolio',
        'show_in_rest' => true,
    ) );
}
add_action( 'init', 'mi_plugin_register_cpt' );

¿Qué hace cada parte?

  • register_post_type(): función principal de WordPress que registra el nuevo tipo de contenido con el slug proyecto.
  • labels: textos que aparecen en el panel de administración — nombre en plural, singular, botones de acción y mensajes de estado.
  • public => true: hace el CPT visible tanto en el admin como en el frontend del sitio.
  • has_archive => true: crea una página de archivo accesible en /proyectos/ que lista todas las entradas del CPT.
  • rewrite: define el slug que aparece en las URLs de las entradas y del archivo.
  • supports: activa los metaboxes estándar de WordPress — editor activa Gutenberg, thumbnail la imagen destacada.
  • show_in_rest => true: expone el CPT en la REST API y habilita el editor de bloques Gutenberg.
  • add_action( ‘init’ ): engancha el registro al hook init, el momento correcto en el ciclo de WordPress para registrar tipos de contenido.