Cómo crear custom post types en WordPress: Guía completa y avanzada

Los Custom Post Types (CPTs) son una forma poderosa de extender WordPress más allá de las páginas y entradas. Con ellos, puedes organizar contenido personalizado como portafolios, eventos o productos, ofreciendo soluciones adaptadas a tus necesidades. En este artículo exploraremos cómo crearlos con register_post_type()y aprovecharemos al máximo sus opciones avanzadas.

Creación básica de un custom post type

El siguiente código crea un CPT básico llamado «Books»:

<?php
function registerBookPostType() {
    $args = [
        'label'     => 'Books',
        'public'    => true,
        'supports'  => ['title', 'editor', 'thumbnail'],
    ];
    register_post_type('book', $args);
}
add_action('init', 'registerBookPostType');

Explicación:

  • label : Nombre que se mostrará en el backend.
  • public : Hace que el CPT sea visible en el frontend y backend.
  • supports: Define qué elementos estarán disponibles en el editor (título, contenido, imagen destacada).

 

 

Opciones avanzadas de register_post_type()

 

1. Crear un CPT que sólo exista en el backend

Si necesitas un CPT accesible únicamente desde el backend, puedes configurar public en false:

<?php
function registerTaskPostType() {
    $args = [
        'label'     => 'Tasks',
        'public'    => false,
        'show_ui'   => true,
        'supports'  => ['title', 'editor'],
    ];
    register_post_type('task', $args);
}
add_action('init', 'registerTaskPostType');

Uso: Ideal para tareas internas o datos administrativos.

 

2. Crear un CPT jerárquico (padres e hijos dentro del mismo CPT)

Para permitir relaciones entre entradas del mismo CPT, utiliza el argumento hierarchical:

<?php
function registerProjectPostType() {
    $args = [
        'label'        => 'Projects',
        'public'       => true,
        'hierarchical' => true,
        'supports'     => ['title', 'editor'],
    ];
    register_post_type('project', $args);
}
add_action('init', 'registerProjectPostType');

Uso: Los «Projects» tendrán un campo en el editor para seleccionar un «Parent Project». Esto es útil para crear relaciones jerárquicas como «categorías principales» o «subproyectos».

3. Colocar el CPT en un menú específico

Para que el CPT «Books» aparezca como subopción dentro del menú «Projects», configura el argumento show_in_menu:

<?php
function registerBookPostTypeWithMenu() {
    $args = [
        'label'        => 'Books',
        'public'       => true,
        'show_in_menu' => 'edit.php?post_type=project', // Aparece bajo "Projects"
        'supports'     => ['title', 'editor'],
    ];
    register_post_type('book', $args);
}
add_action('init', 'registerBookPostTypeWithMenu');

 

4. Crear un CPT con submenús personalizados

Agrega submenús al menú principal del CPT con la función add_submenu_page:

<?php
function registerEventPostType() {
    $args = [
        'label'        => 'Events',
        'public'       => true,
        'show_in_menu' => true,
        'supports'     => ['title', 'editor'],
    ];
    register_post_type('event', $args);

    add_action('admin_menu', function() {
        add_submenu_page(
            'edit.php?post_type=event',
            'Event Settings',
            'Settings',
            'manage_options',
            'event-settings',
            'eventSettingsCallback'
        );
    });
}
add_action('init', 'registerEventPostType');

function eventSettingsCallback() {
    echo '<h1>Event Settings</h1>';
}

Uso: Útil para agregar configuraciones o reportes relacionados con el CPT.

 

5. Ocultar elementos del admin para un CPT

Para un CPT accesible sólo desde el backend y no visible en búsquedas o la API REST:

<?php
function registerHiddenPostType() {
    $args = [
        'label'               => 'Hidden Items',
        'public'              => true,
        'show_ui'             => true,
        'exclude_from_search' => true,
        'show_in_rest'        => false,
    ];
    register_post_type('hidden_item', $args);
}
add_action('init', 'registerHiddenPostType');

 

6. Agregar un CPT dentro del menú de WooCommerce

Para que el CPT aparezca como opción secundaria dentro del menú principal de WooCommerce:

<?php
function registerCouponPostType() {
    $args = [
        'label'        => 'Coupons',
        'public'       => true,
        'show_in_menu' => 'woocommerce', // Coloca el CPT dentro del menú WooCommerce
        'supports'     => ['title', 'editor', 'custom-fields'],
    ];
    register_post_type('coupon', $args);
}
add_action('init', 'registerCouponPostType');

Uso: Organiza contenido relacionado directamente con WooCommerce, como cupones personalizados.

 

Los Custom Post Types son una herramienta poderosa para extender WordPress. Aprovecha las opciones avanzadas de register_post_type()para personalizar la experiencia del usuario y el flujo de trabajo. Documenta tus configuraciones para facilitar el mantenimiento y asegúrate de probar tus implementaciones en un entorno de desarrollo.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Back to Top
0
Would love your thoughts, please comment.x
()
x