¿Es Posible Agregar un Menú de Tipo de Entrada Personalizada Como Submenú de Otro Tipo de Entrada Personalizada?
Actualmente estoy desarrollando un plugin de WordPress que utiliza dos tipos de entradas personalizadas. Lo que quiero saber es: ¿es posible agregar un menú de tipo de entrada personalizada como submenú de otro tipo de entrada personalizada?
Sí. Cuando registras tu tipo de contenido personalizado, necesitas establecer show_in_menu
en la página donde deseas que se muestre.
Agregar un tipo de contenido personalizado como submenú de Entradas
Aquí configuramos el tipo de contenido "películas" para que se incluya en el submenú bajo Entradas.
register_post_type( 'movies',
array(
'labels' => array(
'name' => __( 'Películas' ),
'singular_name' => __( 'Película' )
),
'public' => true,
'has_archive' => true,
'show_in_menu' => 'edit.php'
)
);
Si tienes una taxonomía registrada para el tipo de contenido personalizado, también deberás agregarla a la página.
En add_submenu_page()
, el primer argumento es la página a la que asignarlo y el último es el slug del menú.
add_action('admin_menu', 'my_admin_menu');
function my_admin_menu() {
add_submenu_page('edit.php', 'Género', 'Género', 'manage_options', 'edit-tags.php?taxonomy=genre');
}
Agregar un tipo de contenido personalizado como submenú de otro tipo de contenido personalizado
Para agregar las páginas a otro tipo de contenido personalizado, incluye el parámetro de cadena de consulta del tipo de contenido junto con los nombres de las páginas.
Para agregar el CPT Películas y su taxonomía Género bajo el tipo de contenido Entretenimiento, ajusta el código así.
edit.php
se convierte en edit.php?post_type=entertainment
edit-tags.php
se convierte en edit-tags.php?taxonomy=genre&post_type=entertainment
register_post_type( 'movies',
array(
'labels' => array(
'name' => __( 'Películas' ),
'singular_name' => __( 'Película' )
),
'public' => true,
'has_archive' => true,
'show_in_menu' => 'edit.php?post_type=entertainment'
)
);
add_action('admin_menu', 'my_admin_menu');
function my_admin_menu() {
add_submenu_page('edit.php?post_type=entertainment', 'Género', 'Género', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment');
}

¡Hola, gracias! Ya había encontrado la manera de hacerlo, pero quizás la tuya dé un mejor resultado.

Perdón por repetir. Para que el submenú y el menú padre permanezcan resaltados, necesitas darle a WP un poco más de información. Ok, el parámetro 'show_in_menu' hace que el submenú se marque/ilumine cuando 'my_post_type' está en pantalla. Ahora, también necesitamos añadir otra acción que resalte el menú padre. Podrías probar esto: add_filter( 'parent_file', 'menu_highlight' )); function menu_highlight( $parent_file ){ global $plugin_page, $post_type; if ('my_post_type' == $post_type) { $plugin_page = 'edit.php?post_type=my_post_type'; // el nombre del hook del submenú } return $parent_file; }

Nuestro tipo de entrada personalizado:
$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);
Añadirlo a un Tipo de Entrada Personalizado existente ("product" por ejemplo):
$existing_CPT_menu = 'edit.php?post_type=product';
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page($existign_CPT_menu, 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);
O añadirlo al menú de nuestro plugin personalizado:
// Crear menú del plugin
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');
// Crear submenú con enlace para ver custom_plugin_post_type
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page('myPluginSlug', 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

Esto es lo que funcionó para mí
add_action('admin_menu', 'vrodos_plugin_menu');
function vrodos_plugin_menu(){
add_menu_page( 'Página del Plugin VRodos',
'VRodos',
'manage_options',
'vrodos-plugin',
'vrodos_plugin_main_page');
add_submenu_page('vrodos-plugin',
'Juegos',
'Juegos',
'manage_options',
'edit.php?post_type=vrodos_game'
);
}
Cuando registro el CPT 'vrodos_game' configuro
'show_ui' => true,
'show_in_menu' => false,
