Ist es möglich, ein benutzerdefiniertes Post-Typ-Menü als weiteres benutzerdefiniertes Post-Typ-Untermenü hinzuzufügen?


28

Derzeit entwickle ich ein WordPress-Plugin, das zwei benutzerdefinierte Post-Typen verwendet. Was ich hier wissen möchte: Ist es möglich, ein benutzerdefiniertes Beitragstyp-Menü als Untermenü eines anderen benutzerdefinierten Beitragstyps hinzuzufügen?

Antworten:


59

Ja. Wenn Sie Ihren Beitragstyp registrieren, müssen Sie show_in_menudie Seite auswählen, auf der er angezeigt werden soll.

Hinzufügen eines benutzerdefinierten Beitragstyps als Untermenü für Beiträge

Hier stellen wir unter Beiträge den Beitragstyp "Filme" ein, der im Untermenü enthalten sein soll.

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

Wenn Sie eine Taxonomie für den benutzerdefinierten Beitragstyp registriert haben, muss diese ebenfalls zur Seite hinzugefügt werden.

In add_submenu_page()dem ersten Argument ist die Seite zuweisen es zu und die letzte ist das Menü Slug.

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

Hinzufügen eines benutzerdefinierten Beitragstyps als Untermenü eines anderen benutzerdefinierten Beitragstyps

Um die Seiten einem anderen benutzerdefinierten Beitragstyp hinzuzufügen, geben Sie den Abfragezeichenfolgenparameter des Beitragstyps zusammen mit den Seitennamen an.

Um die CPT-Filme und ihr Taxonomie-Genre unter dem Beitragstyp Unterhaltung hinzuzufügen, passen Sie den Code wie folgt an.

edit.php wird edit.php?post_type=entertainment

edit-tags.php wird 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
Hallo danke. Es klappt. Aber das Untermenü cpt hat sein Untermenü verloren.
Ari

Ich habe meine Antwort mit einer Möglichkeit aktualisiert, Taxonomien einzuschließen.
epilektric

Hallo, danke! Ich hatte den Weg gefunden, es zu tun! Aber vielleicht gibt Ihnen ein besseres Ergebnis!
Ari

Das show_in_menuAttribut hat bei mir nicht funktioniert.
Francisco Corrales Morales

Entschuldigung für die Wiederholung. Damit das Untermenü und das Parametermenü hervorgehoben bleiben, müssen Sie dem WP weitere Informationen geben. Ok, der Parameter 'show_in_menu' bewirkt, dass das Untermenü aktuell / hervorgehoben ist, wenn 'my_post_type' auf dem Bildschirm angezeigt wird. Jetzt müssen wir noch eine weitere Aktion hinzufügen, die das übergeordnete Menü hervorhebt. Sie könnten dies versuchen: 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'; // der Hookname des Untermenüs} return $ parent_file; }
TomeeNS

6

Unser benutzerdefinierter Beitragstyp:

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

Fügen Sie ihn für den vorhandenen benutzerdefinierten Beitragstyp hinzu (z. B. "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);

Oder fügen Sie für unser benutzerdefiniertes Plugin-Menü hinzu:

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

Vielen Dank! Es ist hilfreich für mich.
NSukonny
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.