web-dev-qa-db-fra.com

Afficher la taxonomie personnalisée dans le menu personnalisé

J'ai un menu personnalisé en utilisant add_menu_page:

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

En dessous, je montre un élément de menu de type message personnalisé;

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

Ensuite, j'ajoute une taxonomie personnalisée liée à ce type de message "nwcm_news":

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

Le menu parent et le type de message personnalisé sont tous deux affichés correctement ... mais le menu de taxonomie ne s'affiche pas :(

Comment puis-je résoudre ça? J'avais vérifié cette solution mais la réponse manque l'exemple de code complet ..

5
numediaweb

Vous avez du code foiré.

J'ai reformaté votre code en code qui fonctionne réellement.

La solution suivante vous permet de donner à votre menu Type de message personnalisé un nom de menu de votre choix. Il suffit de changer le libellé "nom_du_menu".

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

Je ne suis pas sûr à 100% si vous souhaitez que votre propre menu administrateur personnalisé ajoute vos éléments sous, ou si vous souhaitez simplement modifier le nom du menu du type de publication personnalisée.

J'ai ajouté dans le menu_name de "NWCM" à la labels de votre type de message personnalisé.

Je vous recommande vivement de lire et de bien comprendre les paramètres et les arguments pour l'enregistrement de types d'articles et de taxonomies personnalisés.


EDIT: 09/05/2014

Si vous souhaitez ajouter complètement votre propre menu administrateur personnalisé et mélanger vos types de messages personnalisés, vos taxonomies personnalisées et toute autre page d'administration personnalisée de votre choix ... La solution suivante fonctionne. S'il vous plaît noter que c'est juste un point de départ et vous ne devez pas le faire de cette façon à 100% à un "T". Ce n'est qu'un exemple ... Je vous recommande de le modifier afin qu'il soit compréhensible et maintenable par vous ou votre développeur.

Accédez à init et enregistrez des types de publication personnalisés et des taxonomies personnalisées.

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

}

Accédez à admin_menu pour créer un menu administrateur parent personnalisé et ajoutez des pages administrateur de sous-menu personnalisé, des pages de type de publication personnalisées et des pages de taxonomie personnalisées au menu administrateur parent personnalisé.

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;

    }

}

Accrochez-vous dans parent_file pour mettre correctement en évidence vos éléments de sous-menu Type de message personnalisé et Taxonomie personnalisée avec votre menu/page parent personnalisé.

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

}

Si vous avez besoin d’éclaircissements sur la façon dont cela fonctionne, lisez les pages suivantes de haut en bas.

  1. Ajout de menus personnalisés d'administration parent
  2. Ajout de menus personnalisés pour les enfants
  3. Rôles et fonctionnalités dans WordPress
  4. Enregistrement de types d'articles personnalisés
  5. Enregistrement de taxonomies personnalisées
  6. API WordPress Plugin :: Référence de l'action
  7. API WordPress Plugin :: Référence de l'Action :: init
  8. API WordPress Plugin :: Référence de l'Action :: admin_menu
  9. API WordPress Plugin :: Référence de filtre
  10. Liste de tous les crochets WordPress (actions et filtres compris)
13
Michael Ecklund

Voici comment j'ai accompli ceci: À l'intérieur de l'action admin_menu, j'ai ajouté un élément de sous-menu à l'élément de menu parent ('nwcm') avec le paramètre URL de la page de modification de la taxonomie.

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