Este Posibil Să Adăugăm Meniul unui Tip de Postare Personalizat Ca Submeniu Al Altui Tip de Postare Personalizat

18 aug. 2013, 20:00:11
Vizualizări: 68.7K
Voturi: 46

În prezent dezvolt un plugin WordPress care folosește două tipuri de postări personalizate. Ceea ce vreau să știu este: este posibil să adaug meniul unui tip de postare personalizat ca submeniu al altui tip de postare personalizat?

0
Toate răspunsurile la întrebare 3
6
94

Da. Când înregistrezi tipul tău de postare, trebuie să setezi show_in_menu la pagina unde dorești să fie afișat.

Adăugarea unui tip de postare personalizat ca sub-meniu al Postărilor

Aici setăm tipul de postare "movies" să fie inclus în sub-meniu sub Postări.

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

Dacă ai o taxonomie înregistrată pentru tipul de postare personalizat, aceasta va trebui să fie adăugată și pe pagină.

În add_submenu_page() primul argument este pagina căreia să i se atribuie, iar ultimul este slug-ul meniului.

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

Adăugarea unui tip de postare personalizat ca sub-meniu al altui tip de postare personalizat

Pentru a adăuga paginile la alt tip de postare personalizat, include parametrul query string al tipului de postare împreună cu numele paginilor.

Pentru a adăuga CPT-ul Filme și taxonomia lui Gen sub tipul de postare Divertisment, ajustează codul astfel.

edit.php devine edit.php?post_type=entertainment

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

register_post_type( 'movies',
    array(
            'labels' => array(
                    'name' => __( 'Filme' ),
                    'singular_name' => __( 'Film' )
            ),
    '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', 'Gen', 'Gen', 'manage_options', 'edit-tags.php?taxonomy=genre&post_type=entertainment'); 
}
18 aug. 2013 20:29:23
Comentarii

Bună, mulțumesc. Funcționează. Dar submeniul CPT și-a pierdut submeniul.

Ari Ari
18 aug. 2013 21:00:58

Am actualizat răspunsul meu cu o metodă de a include taxonomiile.

epilektric epilektric
21 aug. 2013 14:58:21

Bună, îți mulțumesc! Găsisem deja o metodă să o fac! Dar poate a ta va da un rezultat mai bun!

Ari Ari
21 aug. 2013 15:57:53

atributul show_in_menu nu a funcționat pentru mine.

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

Îmi cer scuze pentru repetare. Pentru ca submeniul și meniul părinte să rămână evidențiate, trebuie să oferi WordPress mai multe informații. Bun, parametrul 'show_in_menu' face ca submeniul să fie curent/evidențiat când 'my_post_type' este afișat pe ecran. Acum, trebuie să adăugăm și o altă acțiune care să evidențieze meniul părinte. Puteți încerca asta: 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'; // numele hook-ului submeniului } return $parent_file; }

TomeeNS TomeeNS
26 mai 2017 18:59:51

Mulțumesc pentru furnizarea acestui cod. Am adăugat paginile CPT prin meniul de administrare, creând un sub-meniul pentru pagina de arhivă CPT, dar îmi place mai mult această abordare programatică.

Krys Krys
10 sept. 2021 10:44:52
Arată celelalte 1 comentarii
1

Tipul nostru personalizat de postare:

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

Adăugați-l pentru un Tip de Postare Personalizat existent (de exemplu "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, 'SubmenuTitle', 'SubmenuTitle', 'manage_options', $link_our_new_CPT);

Sau adăugați pentru meniul personalizat al plugin-ului nostru:

// Creează meniul plugin-ului
add_menu_page('MyPlugin', 'MyPlugin', 'manage_options', 'myPluginSlug', 'callback_render_plugin_menu');

// Creează submeniul cu link către vizualizarea 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
Comentarii

Mulțumesc! Este util pentru mine.

NSukonny NSukonny
27 nov. 2019 13:39:35
0

Aceasta este soluția care a funcționat pentru mine

descrierea imaginii

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',
                     'Jocuri',
                     'Jocuri',
                     'manage_options',
                     'edit.php?post_type=vrodos_game'
                     );
}

Când înregistrez tipul de postare personalizat 'vrodos_game' setez

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