web-dev-qa-db-ja.com

カスタムメニュー内にカスタム分類を表示

add_menu_pageを使ったカスタムメニューがあります。

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

その下に、カスタム投稿タイプのメニュー項目を表示します。

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

それから、私はその "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
));

親メニューとカスタム投稿タイプはどちらも正しく表示されますが、分類メニューには表示されません:(

どうすればこれを解決できますか?私はチェックしました この解決策 しかし答えは完全なコード例を欠いています..

5
numediaweb

あなたはいくつかのコードをめちゃくちゃにしている。

私はあなたのコードを実際に動作するコードに再フォーマットしました。

次の解決策はあなたがあなたのカスタム投稿タイプメニューにあなたが望むもののメニュー名を付けることを可能にします。ラベル "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'
    )
));

_分類法_

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

自分のカスタム管理メニューに自分のものを追加したいのか、それともカスタム投稿タイプのメニュー名を変更したいだけなのか、私は100%確信できません。

私はあなたのカスタム投稿タイプのlabelsに "NWCM"のmenu_nameを追加しました。

カスタム投稿タイプと分類法を登録するためのパラメータと引数をよく読んで理解することを強くお勧めします。


編集:2014年9月5日

あなた自身のカスタム管理メニューを完全に追加し、あなたのカスタム投稿タイプ、カスタム分類法、そしてあなた自身の他のカスタム管理ページを混ぜたいのであれば...次の解決策はうまくいきます。注意してください、それは単なる出発点であり、あなたは "T"に100%このようにそれを行う必要はありません。それはほんの一例です...それをあなたやあなたの開発者が理解しやすく、そして保守できるように修正することをお勧めします。

initにフックし、カスタム投稿タイプとカスタム分類法を登録します。

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

}

admin_menuにフックしてカスタム親管理メニューを作成し、カスタムサブメニュー管理ページ、カスタム投稿タイプページ、およびカスタム分類ページをすべてカスタム親管理メニューに追加します。

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;

    }

}

parent_fileにフックして、カスタムの親メニュー/ページで[カスタムの投稿タイプ]および[カスタム分類法]サブメニュー項目を正しく強調表示します。

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

}

これがどのように機能するのかを明確にする必要がある場合は、次のページを上から順に読んでください。

  1. カスタムの親管理者メニューを追加する
  2. カスタムの子管理者メニューを追加する
  3. WordPressの役割と機能
  4. カスタム投稿タイプを登録する
  5. カスタム分類法の登録
  6. WordPressプラグインAPI ::アクションリファレンス
  7. WordPressプラグインAPI ::アクションリファレンス:: init
  8. WordPressプラグインAPI ::アクションリファレンス:: admin_menu
  9. WordPressプラグインAPI ::フィルタリファレンス
  10. すべてのWordPressフックのリスト(アクションとフィルタを含む)
13
Michael Ecklund

Admin_menuアクションの内部で、分類編集ページのURLパラメータを使用して、親メニュー項目( 'nwcm')にサブメニュー項目を追加しました。

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