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?

Ari
quelle

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'); 
}
epilektric
quelle
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);
ConConovaloff
quelle
Vielen Dank! Es ist hilfreich für mich.
NSukonny