È Possibile Aggiungere il Menu di un Custom Post Type Come Sottomenu di un Altro Custom Post Type

18 ago 2013, 20:00:11
Visualizzazioni: 68.7K
Voti: 46

Sto attualmente sviluppando un plugin WordPress che utilizza due custom post type. Quello che vorrei sapere è: è possibile aggiungere il menu di un custom post type come sottomenu di un altro custom post type?

0
Tutte le risposte alla domanda 3
6
94

Sì. Quando registri il tuo post type devi impostare show_in_menu alla pagina in cui desideri che venga visualizzato.

Aggiungere un custom post type come sotto-menu di Articoli

Qui impostiamo il post type "movies" per essere incluso nel sotto-menu sotto Articoli.

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

Se hai una tassonomia registrata per il custom post type, dovrà essere aggiunta anche alla pagina.

In add_submenu_page() il primo argomento è la pagina a cui assegnarlo e l'ultimo è lo slug del menu.

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

Aggiungere un custom post type come sotto-menu di un altro custom post type

Per aggiungere le pagine a un altro custom post type, includi il parametro query string del post type insieme ai nomi delle pagine.

Per aggiungere il CPT Movies e la sua tassonomia Genre sotto il post type Entertainment, modifica il codice in questo modo.

edit.php diventa edit.php?post_type=entertainment

edit-tags.php diventa 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'); 
}
18 ago 2013 20:29:23
Commenti

Ciao, grazie. Funziona. Ma il sottomenu del CPT ha perso il suo sottomenu.

Ari Ari
18 ago 2013 21:00:58

Ho aggiornato la mia risposta con un modo per includere le tassonomie.

epilektric epilektric
21 ago 2013 14:58:21

Ciao, grazie mille! Avevo già trovato il modo per farlo! Ma forse il tuo darà un risultato migliore!

Ari Ari
21 ago 2013 15:57:53

l'attributo show_in_menu non ha funzionato per me.

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

Scusate la ripetizione. Affinché il sottomenu e il menu padre rimangano evidenziati, dovete fornire a WP qualche informazione in più. Ok, il parametro 'show_in_menu' fa sì che il sottomenu sia corrente/evidenziato quando 'my_post_type' è sullo schermo. Ora, dobbiamo aggiungere anche un'altra azione, che evidenzierà il menu padre. Potete provare questo: 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'; // il nome dell'hook del sottomenu } return $parent_file; }

TomeeNS TomeeNS
26 mag 2017 18:59:51

Grazie per aver fornito questo codice. Ho aggiunto le pagine del mio cpt tramite il menu admin creando un sottomenu alla pagina archivio del mio cpt, ma preferisco questo modo programmatico.

Krys Krys
10 set 2021 10:44:52
Mostra i restanti 1 commenti
1

Il nostro tipo di post personalizzato:

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

Aggiungerlo a un Custom Post Type esistente (ad esempio "product"):

$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, 'Titolo Sottomenu', 'Titolo Sottomenu', 'manage_options', $link_our_new_CPT);

Oppure aggiungerlo al menu del nostro plugin personalizzato:

// Creazione menu del plugin
add_menu_page('MioPlugin', 'MioPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Creazione sottomenu con link alla vista custom_plugin_post_type
$link_our_new_CPT = 'edit.php?post_type=custom_plugin_post_type';
add_submenu_page('myPluginSlug', 'Titolo Sottomenu', 'Titolo Sottomenu', 'manage_options', $link_our_new_CPT);
14 mar 2017 13:40:13
Commenti

Grazie! È utile per me.

NSukonny NSukonny
27 nov 2019 13:39:35
0

Questo è ciò che ha funzionato per me

descrizione immagine

add_action('admin_menu', 'vrodos_plugin_menu');

function vrodos_plugin_menu(){
    add_menu_page( 'Pagina Plugin VRodos',
                   'VRodos',
                    'manage_options',
                    'vrodos-plugin',
                    'vrodos_plugin_main_page');
    
    
    add_submenu_page('vrodos-plugin',
                     'Giochi',
                     'Giochi',
                     'manage_options',
                     'edit.php?post_type=vrodos_game'
                     );
}

Quando registro il custom post type 'vrodos_game' imposto

    'show_ui'               => true,
    'show_in_menu'          => false,
23 feb 2022 11:42:04