En ocasiones es necesario crear tipos de contenido diferentes a los que nos vienen por defecto en WordPress: entredas y páginas. Por ejemplo, quizás necesites un tipo de contenido específico para cursos o para productos o… para lo que sea.
Esto lo puedes hacer con algunos plugins pero en esta ocasión vamos a utilizar código.
El código que te muestro a continuación se puede colocar en el archivo function.php, pero eso no es nada recomendable, ya que si en un futuro quisieras cambiar tu tema (plantilla) el cpt desaparecerá, por tanto, lo recomendable es crear tu propio plugin de funcionalidades e incluir el código ahí.
if ( ! function_exists('id_cpt') ) {
// Register Custom Post Type
function id_cpt() {
$labels = array(
'name' => _x( 'Nombre_cpt', 'Post Type General Name', 'id_cpt' ),
'singular_name' => _x( 'Nombre_cpt', 'Post Type Singular Name', 'id_cpt' ),
'menu_name' => __( 'Nombre_cpt', 'id_cpt' ),
'name_admin_bar' => __( 'Nombre_cpt', 'id_cpt' ),
'archives' => __( 'Item Archives', 'id_cpt' ),
'attributes' => __( 'Atributos del Nombre_cpt', 'id_cpt' ),
'parent_item_colon' => __( 'Nombre_cpt padre', 'id_cpt' ),
'all_items' => __( 'Todos los Nombre_cpt', 'id_cpt' ),
'add_new_item' => __( 'Añadir nuevo Nombre_cpt', 'id_cpt' ),
'add_new' => __( 'Añadir nuevo', 'id_cpt' ),
'new_item' => __( 'Añadir Nombre_cpt', 'id_cpt' ),
'edit_item' => __( 'Editar Nombre_cpt', 'id_cpt' ),
'update_item' => __( 'Actualizar Nombre_cpt', 'id_cpt' ),
'view_item' => __( 'Visualizar Nombre_cpt', 'id_cpt' ),
'view_items' => __( 'Visualizar Nombre_cpt', 'id_cpt' ),
'search_items' => __( 'Buscar Nombre_cpt', 'id_cpt' ),
'not_found' => __( 'No encontrado', 'id_cpt' ),
'not_found_in_trash' => __( 'No encontrado en papelera', 'id_cpt' ),
'featured_image' => __( 'Imagen destacada', 'id_cpt' ),
'set_featured_image' => __( 'Establecer imagen destacada', 'id_cpt' ),
'remove_featured_image' => __( 'Eliminar imagen destacada', 'id_cpt' ),
'use_featured_image' => __( 'Usar como imagen destacada', 'id_cpt' ),
'insert_into_item' => __( 'Insertar nuevo Nombre_cpt', 'id_cpt' ),
'uploaded_to_this_item' => __( 'Uploaded to this item', 'id_cpt' ),
'items_list' => __( 'Listado de Nombre_cpt', 'id_cpt' ),
'items_list_navigation' => __( 'Items list navigation', 'id_cpt' ),
'filter_items_list' => __( 'Filter items list', 'id_cpt' ),
);
$rewrite = array(
'slug' => 'id_cpt',
'with_front' => true,
'pages' => true,
'feeds' => true,
);
$args = array(
'label' => __( 'Nombre_cpt', 'id_cpt' ),
'description' => __( 'Tipo de contenido específico para los Nombre_cpt', 'id_cpt' ),
'labels' => $labels,
'supports' => array( 'title', 'editor', 'excerpt', 'thumbnail', 'revisions', 'custom-fields', 'page-attributes', 'post-formats' ),
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'menu_position' => 5,
'menu_icon' => 'dashicons-welcome-view-site',
'show_in_admin_bar' => true,
'show_in_nav_menus' => true,
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'rewrite' => $rewrite,
'capability_type' => 'page',
'show_in_rest' => true, //esta línea es necesaria para gutenberg
);
register_post_type( 'id_cpt', $args );
}
add_action( 'init', 'id_cpt', 0 );
}
Este fragmento de código es genérico y deberías hacer algunos cambios para personalizarlo. el parámetro id_cpt deberías modificarlo por el nombre que vaya a identificar a tu cpt, por ejemplo: curso, producto… Debes saber que este código identificador lo usará WordPress internamente y, por tanto puedes llamarlo como quieras, pero intentando asegurarte que no se repita con el que pudiera crearse desde cualquier otro plugin. Para ello te sugiero que utilices algún tipo de prefijo: wpsinfronteras_cursos, wpsinfronteras_productos…
Por otro lado, las apariciones de Nombre_cpt debes sustituirlo por el nombre que desees que se muestre en el escritorio de tu WordPress. En este caso ya no es tan importante el nombre, más allá de que te ayude a reconocer a qué contenidos se refiere. No obstante, si le pones el nombre «producto» y luego instalas Woocommerce tendrás dos cpt con el mismo nombre y eso te puede generar confusiones.