web-dev-qa-db-de.com

Benutzerdefinierte Taxonomie im benutzerdefinierten Menü anzeigen

Ich habe ein benutzerdefiniertes Menü mit add_menu_page:

add_menu_page('My menu' , 'Some text', 'read', 'nwcm');

Darunter zeige ich einen benutzerdefinierten Menüeintrag für den Beitragstyp.

// Create the news custom post type
register_post_type('nwcm_news', array(
    'labels' => array(
        'name' => __('News for clients', NWCM_TEXT_DOMAIN) ,
        'singular_name' => __('News', NWCM_TEXT_DOMAIN)
    ) ,
    'public' => true,
    'has_archive' => true,
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => 'nwcm',
    'taxonomies' => array(
        'nwcm_news_category'
    ) ,
));

Dann füge ich eine benutzerdefinierte Taxonomie hinzu, die dem Post-Typ "nwcm_news" angehängt ist:

// register news taxonomy
register_taxonomy('nwcm_news_category', 'nwcm_news', array(
    'label' => __('News categories') ,
    'menu_name' => __('News categories') ,
    'rewrite' => array(
        'slug' => 'nwcm_news_category'
    ) ,
    'hierarchical' => true
));

Das übergeordnete Menü und der benutzerdefinierte Beitragstyp werden korrekt angezeigt. Das Taxonomiemenü wird jedoch nicht angezeigt :(

Wie kann ich das lösen? Ich hatte diese Lösung überprüft, aber der Antwort fehlt das vollständige Codebeispiel.

5
numediaweb

Sie haben einen fehlerhaften Code.

Ich habe Ihren Code in Code umformatiert, der tatsächlich funktioniert.

Mit der folgenden Lösung können Sie Ihrem benutzerdefinierten Beitragstyp-Menü einen beliebigen Menünamen zuweisen. Ändern Sie einfach die Bezeichnung "menu_name".

POST TYPE

// Create the news custom post type
register_post_type('nwcm_news', array(
    'labels'        => array(
        'name'          => __('News for clients', 'NWCM'),
        'singular_name' => __('News', 'NWCM'),
        'menu_name'     => __('NWCM', 'NWCM'),
        'all_items'     => __('View Articles', 'NWCM'),
    ),
    'public'        => true,
    'has_archive'   => true,
    'show_ui'       => true,
    'show_in_menu'  => true,
    'taxonomies'    => array(
        'nwcm_news_category'
    )
));

TAXONOMIE

// register news taxonomy
register_taxonomy('nwcm_news_category', 'nwcm_news', array(
    'label'         => 'News Categories',
    'labels'        => array(
        'menu_name' => __('News Categories', 'NWCM')
    ),
    'rewrite'       => array(
        'slug' => 'nwcm-news-category'
    ),
    'hierarchical'  => true
));

Ich bin mir nicht 100% sicher, ob Sie möchten, dass Ihr eigenes benutzerdefiniertes Admin-Menü Ihre Inhalte darunter hinzufügt, oder ob Sie nur den Menünamen des benutzerdefinierten Beitragstyps ändern möchten.

Ich habe im menu_name von "NWCM" die labels Ihres benutzerdefinierten Beitragstyps hinzugefügt.

Ich würde Ihnen wärmstens empfehlen, die Parameter und Argumente für die Registrierung benutzerdefinierter Beitragstypen und Taxonomien durchzulesen und vollständig zu verstehen.


EDIT: 09/05/2014

Wenn Sie Ihr eigenes benutzerdefiniertes Administrationsmenü vollständig hinzufügen und Ihre benutzerdefinierten Beitragstypen, benutzerdefinierten Taxonomien und andere benutzerdefinierte Administrationsseiten hinzufügen möchten ... Die folgende Lösung funktioniert. Bitte beachten Sie, dass dies nur ein Ausgangspunkt ist und Sie dies nicht zu 100% zu einem "T" machen müssen. Es ist nur ein Beispiel ... Ich empfehle, dass Sie es so ändern, dass es für Sie oder Ihren Entwickler verständlich und wartbar ist.

In init einbinden und benutzerdefinierte Beitragstypen und benutzerdefinierte Taxonomien registrieren.

if ( ! function_exists( 'mbe_init' ) ) {

    function mbe_init() {

        # Create the news custom post type
        register_post_type( 'nwcm_news', array(
            'labels'       => array(
                'name'          => __( 'News for clients', 'NWCM' ),
                'singular_name' => __( 'News', 'NWCM' ),
            ),
            'public'       => true,
            'has_archive'  => true,
            'show_ui'      => true,
            'show_in_menu' => false,// adding to custom menu manually
            'taxonomies'   => array(
                'nwcm_news_category'
            )
        ) );

        # Create the news categories custom taxonomy
        register_taxonomy( 'nwcm_news_category', 'nwcm_news', array(
            'label'        => 'News Categories',
            'labels'       => array(
                'menu_name' => __( 'News Categories', 'NWCM' )
            ),
            'rewrite'      => array(
                'slug' => 'nwcm-news-category'
            ),
            'hierarchical' => true
        ) );

    }

    add_action( 'init', 'mbe_init' );

}

Rufen Sie admin_menu auf, um ein benutzerdefiniertes übergeordnetes Administrationsmenü zu erstellen, und fügen Sie dem benutzerdefinierten übergeordneten Administrationsmenü Benutzerdefinierte Untermenü-Administrationsseiten, Benutzerdefinierte Beitragstypseiten und Benutzerdefinierte Taxonomieseiten hinzu.

if ( ! function_exists( 'mbe_add_admin_menu' ) && ! function_exists( 'mbe_display_admin_page' ) ) {

    function mbe_add_admin_menus() {

        # Settings for custom admin menu
        $page_title = 'News for clients';
        $menu_title = 'NWCM';
        $capability = 'post';
        $menu_slug  = 'nwcm';
        $function   = 'mbe_display_admin_page';// Callback function which displays the page content.
        $icon_url   = 'dashicons-admin-page';
        $position   = 0;

        # Add custom admin menu
        add_menu_page( $page_title, $menu_title, $capability, $menu_slug, $function, $icon_url, $position );

        $submenu_pages = array(

            # Avoid duplicate pages. Add submenu page with same slug as parent slug.
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => 'Summary of News',
                'menu_title'  => 'Summary',
                'capability'  => 'read',
                'menu_slug'   => 'nwcm',
                'function'    => 'mbe_display_admin_page',// Uses the same callback function as parent menu.
            ),

            # Post Type :: View All Posts
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => '',
                'menu_title'  => 'View News',
                'capability'  => '',
                'menu_slug'   => 'edit.php?post_type=nwcm_news',
                'function'    => null,// Doesn't need a callback function.
            ),

            # Post Type :: Add New Post
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => '',
                'menu_title'  => 'Add News',
                'capability'  => '',
                'menu_slug'   => 'post-new.php?post_type=nwcm_news',
                'function'    => null,// Doesn't need a callback function.
            ),

            # Taxonomy :: Manage News Categories
            array(
                'parent_slug' => 'nwcm',
                'page_title'  => '',
                'menu_title'  => 'News Categories',
                'capability'  => '',
                'menu_slug'   => 'edit-tags.php?taxonomy=nwcm_news_category&post_type=nwcm_news',
                'function'    => null,// Doesn't need a callback function.
            ),

        );

        # Add each submenu item to custom admin menu.
        foreach ( $submenu_pages as $submenu ) {

            add_submenu_page(
                $submenu['parent_slug'],
                $submenu['page_title'],
                $submenu['menu_title'],
                $submenu['capability'],
                $submenu['menu_slug'],
                $submenu['function']
            );

        }

    }

    add_action( 'admin_menu', 'mbe_add_admin_menus', 1 );

    /* If you add any extra custom sub menu pages which are not a Custom Post Type or a Custom Taxonomy, you will need
     * to create a callback function for each of your custom submenu items you create above.
     */

    # Default Admin Page for Custom Admin Menu
    function mbe_display_admin_page() {

        # Display custom admin page content from newly added custom admin menu.
        echo '<div class="wrap">' . PHP_EOL;
        echo '<h2>My Custom Admin Page Title</h2>' . PHP_EOL;
        echo '<p>This is the custom admin page created from the custom admin menu.</p>' . PHP_EOL;
        echo '</div><!-- end .wrap -->' . PHP_EOL;
        echo '<div class="clear"></div>' . PHP_EOL;

    }

}

Hängen Sie parent_file ein, um die Untermenüelemente "Benutzerdefinierter Beitragstyp" und "Benutzerdefinierte Taxonomie" in Ihrem benutzerdefinierten übergeordneten Menü/Ihrer benutzerdefinierten Seite korrekt hervorzuheben.

if ( ! function_exists( 'mbe_set_current_menu' ) ) {

    function mbe_set_current_menu( $parent_file ) {
        global $submenu_file, $current_screen, $pagenow;

        # Set the submenu as active/current while anywhere in your Custom Post Type (nwcm_news)
        if ( $current_screen->post_type == 'nwcm_news' ) {

            if ( $pagenow == 'post.php' ) {
                $submenu_file = 'edit.php?post_type=' . $current_screen->post_type;
            }

            if ( $pagenow == 'edit-tags.php' ) {
                $submenu_file = 'edit-tags.php?taxonomy=nwcm_news_category&post_type=' . $current_screen->post_type;
            }

            $parent_file = 'nwcm';

        }

        return $parent_file;

    }

    add_filter( 'parent_file', 'mbe_set_current_menu' );

}

Wenn Sie Erläuterungen dazu benötigen, lesen Sie die folgenden Seiten von oben nach unten.

  1. Hinzufügen von benutzerdefinierten Eltern-Admin-Menüs
  2. Hinzufügen von benutzerdefinierten Child Admin-Menüs
  3. Rollen und Funktionen in WordPress
  4. Registrieren von benutzerdefinierten Beitragstypen
  5. Registrieren benutzerdefinierter Taxonomien
  6. WordPress Plugin API :: Aktionsreferenz
  7. WordPress Plugin API :: Aktionsreferenz :: init
  8. WordPress Plugin API :: Aktionsreferenz :: admin_menu
  9. WordPress Plugin API :: Filter Referenz
  10. Liste aller WordPress-Hooks (einschließlich Aktionen und Filter)
13
Michael Ecklund

So habe ich das erreicht: Innerhalb der Aktion admin_menu habe ich dem übergeordneten Menüelement ('nwcm') einen Untermenüeintrag mit dem URL-Parameter der Taxonomiebearbeitungsseite hinzugefügt.

add_submenu_page('nwcm', 'News categories', 'News categories', 'edit_posts', 'edit-tags.php?taxonomy=nwcm_news&post_type=nwcm_news',false );
1
NRTRX