È possibile aggiungere un menu di tipo di posta personalizzato come un altro sottomenu di tipo di posta personalizzato


28

Attualmente sto sviluppando un plugin per wordpress che utilizza due tipi di post personalizzati. Quello che voglio sapere qui: è possibile aggiungere un menu di tipo di post personalizzato come sottomenu di un altro tipo di post personalizzato?

Risposte:


59

Sì. Quando registri il tuo tipo di post, devi impostare show_in_menula pagina su cui desideri visualizzarla.

Aggiunta di un tipo di post personalizzato come sottomenu di Post

Qui impostiamo il tipo di post "film" da includere nel sottomenu Post.

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 nel tipo di posta personalizzato, dovrà essere aggiunta anche alla pagina.

Nel add_submenu_page()primo argomento è la pagina a cui assegnarlo e l'ultimo è la lumaca 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'); 
}  

Aggiunta di un tipo di post personalizzato come sottomenu di un altro tipo di post personalizzato

Per aggiungere le pagine a un altro tipo di post personalizzato, includere il parametro della stringa di query del tipo di post insieme ai nomi delle pagine.

Per aggiungere i film CPT e il suo genere di tassonomia sotto il tipo di post Intrattenimento, 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'); 
}

2
Ciao grazie. Funziona. Ma il sottomenu cpt ha perso il suo sottomenu.
Ari,

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

Ciao grazie Avevo trovato il modo di farlo! Ma potrebbe essere tuo, otterrai un risultato migliore!
Ari,

l' show_in_menuattributo, non ha funzionato per me.
Francisco Corrales Morales,

Scusa per la ripetizione. Affinché il sottomenu e il menu di paretn rimangano evidenziati, è necessario fornire a WP ulteriori informazioni. Ok, il parametro 'show_in_menu' rende il sottomenu attuale / evidenziato quando 'my_post_type' è sullo schermo. Ora, dobbiamo anche aggiungere un'altra azione, che evidenzierà il menu principale. Puoi provare questo: add_filter ('parent_file', 'menu_highlight')); funzione 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 hook del sottomenu} restituisce $ parent_file; }
TomeeNS,

6

Il nostro tipo di post personalizzato:

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

Aggiungilo per il tipo di posta personalizzato esistente (ad esempio "prodotto"):

$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);

Oppure aggiungi per il nostro menu plug-in personalizzato:

// 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);

Grazie! È utile per me
NSukonny,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.