¿Es posible agregar un menú de tipo de mensaje personalizado como otro submenú de tipo de mensaje personalizado?

28

Actualmente estoy desarrollando un complemento de WordPress que utiliza dos tipos de publicaciones personalizadas. Lo que quiero saber aquí: ¿es posible agregar un menú de tipo de publicación personalizado como submenú de otro tipo de publicación personalizado?

Ari
fuente

Respuestas:

59

Sí. Cuando registre su tipo de publicación, debe establecer show_in_menula página en la que desea que se muestre.

Agregar un tipo de publicación personalizada como un submenú de Publicaciones

Aquí configuramos el tipo de publicación "películas" para que se incluya en el submenú en Publicaciones.

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    'public' => true,
    'has_archive' => true,
    'show_in_menu' => 'edit.php'
    )
);

Si tiene una taxonomía registrada en el tipo de publicación personalizada, también deberá agregarla a la página.

En add_submenu_page()el primer argumento está la página para asignarlo y el último es la babosa del menú.

add_action('admin_menu', 'my_admin_menu'); 
function my_admin_menu() { 
    add_submenu_page('edit.php', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre'); 
}  

Agregar un tipo de publicación personalizada como un submenú de otro tipo de publicación personalizada

Para agregar las páginas a otro tipo de publicación personalizada, incluya el parámetro de cadena de consulta del tipo de publicación junto con los nombres de las páginas.

Para agregar las películas CPT y su género de taxonomía bajo el tipo de publicación Entretenimiento, ajuste el código de esta manera.

edit.php se convierte edit.php?post_type=entertainment

edit-tags.php se convierte edit-tags.php?taxonomy=genre&post_type=entertainment

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Movies' ),
                    'singular_name' => __( 'Movie' )
            ),
    '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', 'Genre', 'Genre', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}
epilektric
fuente
2
Hola Gracias. Funciona. Pero el submenú cpt perdió su submenú.
Ari
He actualizado mi respuesta con una forma de incluir taxonomías.
epilektric
Hola gracias ¡Había encontrado la manera de hacerlo! ¡Pero puede ser tuyo dará un mejor resultado!
Ari
El show_in_menuatributo no funcionó para mí.
Francisco Corrales Morales
Perdón por repetir. Para que el submenú y el menú parental permanezcan resaltados, debe proporcionar a WP más información. Ok, el parámetro 'show_in_menu' hace que el submenú sea actual / resaltado cuando 'my_post_type' está en la pantalla. Ahora, también necesitamos agregar otra acción, que resaltará el menú principal. Puede intentar esto: add_filter ('parent_file', 'menu_highlight')); función 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 gancho del submenú} return $ parent_file; }
TomeeNS
6

Nuestro tipo de publicación personalizada:

$args['show_in_menu'] = false;
register_post_type('custom_plugin_post_type', $args);

Añádalo al tipo de publicación personalizada existente ("producto", 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 agregue para nuestro menú de complementos personalizado:

// Create plugin menu
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Create submenu with href to view 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);
ConConovaloff
fuente
¡Gracias! Es útil para mi.
NSukonny