Admin menú de un Custom Post Type como submenú de otra página WordPress
Cuándo registras un custom post type (tipo de post personalizado, abreviado CPT) en WordPress, puedes tener toda la interfaz para su gestión sin mover un dedo. Para acceder a esta interfaz WordPress crea un menú de nivel superior en el área de administración. Todo lo que hace falta para esto es registrar el CPT con el parámetro show_in_menu = true
. Por ejemplo:
add_action('init', 'cyb_custom_post_type');
function cyb_custom_post_type() {
$args = array(
'show_in_menu' => true,
'label' => 'Mi CPT',
'public' => true
);
register_post_type( 'cpt', $args );
}
Y tendremos el menú:
Hoy me llamó la atención pregunta en WPSE (Custom Post Type Nav to Subpage) acerca de como mostrar este menú bajo la sección «Ajustes» del área de administración de WordPress. El usuario decía conocer el parámetro show_in_menu
para la función register_post_type()
, pero obviamente no lo conocía del todo. Si leemos la documentación de resgister_post_type() podemos ver que el parámetro show_in_menu
acepta tres posibles valores:
false
– no mostrar el menútrue
– mostrar el menú en nivel superior'some string'
– Cadena de otra página de nivel superior, como ‘tools.php’, ‘plugins.php, ‘options-general.php’, ‘edit.php’, ‘edit.php?post_type=page’, etc. El menú del CPT se pondrá como submenú de esta página.
Por tanto, podemos poner el menú de nuestro CPT dónde queramos, tan sólo necesitamos conocer el «string» de la página bajo la cuál queremos que aparezca. Por ejemplo, como submenu de «Ajustes» se utilizará la cadena options-general.php
:
add_action('init', 'cyb_custom_post_type');
function cyb_custom_post_type() {
$args = array(
'show_in_menu' => 'options-general.php',
'label' => 'Mi CPT',
'public' => true
);
register_post_type( 'cpt', $args );
}
Incluso podríamos ponerlo bajo el menú «Plugins»:
add_action('init', 'cyb_custom_post_type');
function cyb_custom_post_type() {
$args = array(
'show_in_menu' => 'plugins.php',
'label' => 'Mi CPT',
'public' => true
);
register_post_type( 'cpt', $args );
}
Fácil, ¿verdad? Una vez más la flexibilidad de WordPress no defrauda.