¿Es Posible Agregar un Menú de Tipo de Entrada Personalizada Como Submenú de Otro Tipo de Entrada Personalizada?

18 ago 2013, 20:00:11
Vistas: 68.7K
Votos: 46

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?

0
Todas las respuestas a la pregunta 3
6
94

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'); 
}
18 ago 2013 20:29:23
Comentarios

Hola, gracias. Funciona. Pero el submenú CPT perdió su submenú.

Ari Ari
18 ago 2013 21:00:58

He actualizado mi respuesta con una forma de incluir taxonomías.

epilektric epilektric
21 ago 2013 14:58:21

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

Ari Ari
21 ago 2013 15:57:53

el atributo show_in_menu no funcionó para mí.

Francisco Corrales Morales Francisco Corrales Morales
27 feb 2015 00:08:34

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; }

TomeeNS TomeeNS
26 may 2017 18:59:51

Gracias por proporcionar este código. Yo había añadido mis páginas de CPT a través del administrador de menús creando un submenú para la página de archivo de mi CPT, pero me gusta más esta forma programática.

Krys Krys
10 sept 2021 10:44:52
Mostrar los 1 comentarios restantes
1

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);
14 mar 2017 13:40:13
Comentarios

¡Gracias! Esto me resulta útil.

NSukonny NSukonny
27 nov 2019 13:39:35
0

Esto es lo que funcionó para mí

Descripción de la imagen

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,
23 feb 2022 11:42:04