En WordPress, un Custom Post Type (CPT) es una funcionalidad que te permite crear contenido personalizado en tu sitio web. Por defecto, WordPress viene con algunos tipos de contenido predefinidos, como entradas y páginas, pero un CPT te permite crear tu propio tipo de contenido.
Un CPT se puede utilizar para una variedad de propósitos, desde crear un catálogo de productos en línea hasta mostrar eventos en un calendario.
¿Cómo crear un CPT en WordPress?
Para crear un CPT en WordPress, puedes utilizar la función register_post_type()
y agregar el código en el archivo functions.php
de tu tema hijo, en un plugin personalizado o en un plugin de funcionalidades como CODE SNIPPETS.
Importante: No agregues el código en el functions.php
del tema principal (Padre) ya que al actualizarlo perderás el código y tendrás que agregarlo otra vez.
Aquí está el código para crear un CPT llamado «eventos» con el editor clásico:
function crear_cpt_eventos() {
$labels = array(
'name' => __( 'Eventos' ),
'singular_name' => __( 'Evento' ),
'add_new' => __( 'Agregar nuevo evento' ),
'add_new_item' => __( 'Agregar nuevo evento' ),
'edit_item' => __( 'Editar evento' ),
'new_item' => __( 'Nuevo evento' ),
'all_items' => __( 'Todos los eventos' ),
'view_item' => __( 'Ver evento' ),
'search_items' => __( 'Buscar eventos' ),
'not_found' => __( 'No se encontraron eventos' ),
'not_found_in_trash' => __( 'No se encontraron eventos en la papelera' ),
'parent_item_colon' => '',
'menu_name' => 'Eventos'
);
$args = array(
'labels' => $labels,
'public' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-calendar',
'query_var' => true,
'rewrite' => array( 'slug' => 'eventos' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'taxonomies' => array( 'category', 'post_tag' )
);
register_post_type( 'eventos', $args );
}
add_action( 'init', 'crear_cpt_eventos' );
Con este código, se creará un nuevo CPT llamado «eventos» que tendrá las mismas funcionalidades que una entrada de blog normal, incluyendo el editor clásico.
¿Cómo crear un CPT con el editor Gutenberg en WordPress?
Para crear un CPT con el editor Gutenberg en WordPress, debes agregar el parámetro show_in_rest
a la lista de argumentos de register_post_type()
. Esto le indica a WordPress que quieres habilitar el editor de bloques de Gutenberg para este CPT.
Aquí está el código para crear un CPT llamado «eventos» con el editor Gutenberg:
function crear_cpt_eventos() {
$labels = array(
'name' => __( 'Eventos' ),
'singular_name' => __( 'Evento' ),
'add_new' => __( 'Agregar nuevo evento' ),
'add_new_item' => __( 'Agregar nuevo evento' ),
'edit_item' => __( 'Editar evento' ),
'new_item' => __( 'Nuevo evento' ),
'all_items' => __( 'Todos los eventos' ),
'view_item' => __( 'Ver evento' ),
'search_items' => __( 'Buscar eventos' ),
'not_found' => __( 'No se encontraron eventos' ),
'not_found_in_trash' => __( 'No se encontraron eventos en la papelera' ),
'parent_item_colon' => '',
'menu_name' => 'Eventos'
);
$args = array(
'labels' => $labels,
'public' => true,
'show_in_rest' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-calendar',
'query_var' => true,
'rewrite' => array( 'slug' => 'eventos' ),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'supports' => array( 'title', 'editor', 'thumbnail' ),
'taxonomies' => array( 'category', 'post_tag' )
);
register_post_type( 'eventos', $args );
}
add_action( 'init', 'crear_cpt_eventos' );
Con este código, se creará un nuevo CPT llamado «eventos» que tendrá las mismas funcionalidades que una entrada de blog normal, pero con el editor Gutenberg habilitado.
¿Cuál es la diferencia en el código entre crear un CPT con el editor clásico y con el editor Gutenberg?
La diferencia en el código entre crear un CPT con el editor clásico y con el editor Gutenberg es la inclusión del parámetro show_in_rest
en la lista de argumentos de register_post_type()
para habilitar el editor de bloques de Gutenberg.
En el caso de un CPT que use el editor clásico, el parámetro show_in_rest
no se incluiría en la lista de argumentos.
Nos vemos en el siguiente tutorial.
Un saludo,