Czy możliwe jest dodanie menu niestandardowego typu postu jako innego podmenu niestandardowego typu postu

28

Obecnie opracowuję wtyczkę wordpress, która wykorzystuje dwa niestandardowe typy postów. Co chcę tutaj wiedzieć: czy można dodać menu niestandardowego typu posta jako podmenu innego niestandardowego typu postu?

Ari
źródło

Odpowiedzi:

59

Tak. Po zarejestrowaniu typu postu musisz ustawić show_in_menustronę, na której ma być wyświetlany.

Dodanie niestandardowego typu postu jako podmenu postów

Tutaj ustawiamy typ postu „filmy”, który ma być zawarty w podmenu pod postami.

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

Jeśli masz przypisaną taksonomię do niestandardowego typu postu, należy ją również dodać do strony.

W add_submenu_page()pierwszym argumencie jest strona, do której ma zostać przypisany, a ostatnim jest ślimak 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'); 
}  

Dodanie niestandardowego typu postu jako podmenu innego niestandardowego typu postu

Aby dodać strony do innego niestandardowego typu postu, dołącz parametr ciągu zapytania typu postu wraz z nazwami stron.

Aby dodać Filmy CPT i jego taksonomię Gatunek w polu Post Entertainment, dostosuj kod w ten sposób.

edit.php staje się edit.php?post_type=entertainment

edit-tags.php staje się 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'); 
}
epilektryczny
źródło
2
Cześć, dzięki. To działa. Ale podmenu cpt straciło swoje podmenu.
Ari
Zaktualizowałem swoją odpowiedź, aby uwzględnić taksonomie.
epilektryczny
Cześć dzięki! Znalazłem sposób, aby to zrobić! Ale być może twój da lepszy wynik!
Ari
show_in_menuatrybut, nie pracował dla mnie.
Francisco Corrales Morales
Przepraszam za powtarzanie. Aby podmenu i menu paretn były podświetlone, musisz podać WP więcej informacji. Ok, parametr „show_in_menu” powoduje, że podmenu jest aktualne / podświetlone, gdy „my_post_type” jest na ekranie. Teraz musimy również dodać kolejną akcję, która podświetli menu nadrzędne. Możesz spróbować: add_filter ('parent_file', 'menu_highlight')); funkcja menu_highlight ($ parent_file) {global $ plugin_page, $ post_type; if ('my_post_type' == $ post_type) {$ plugin_page = 'edit.php? post_type = my_post_type'; // nazwa haka podmenu} return $ parent_file; }
TomeeNS
6

Nasz niestandardowy typ postu:

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

Dodaj go dla istniejącego niestandardowego typu postu (na przykład „produkt”):

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

Lub dodaj do naszego niestandardowego menu wtyczek:

// 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
źródło
Dzięki! To mi pomaga.
NSukonny