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
));
親メニューとカスタム投稿タイプはどちらも正しく表示されますが、分類メニューには表示されません:(
どうすればこれを解決できますか?私はチェックしました この解決策 しかし答えは完全なコード例を欠いています..
あなたはいくつかのコードをめちゃくちゃにしている。
私はあなたのコードを実際に動作するコードに再フォーマットしました。
次の解決策はあなたがあなたのカスタム投稿タイプメニューにあなたが望むもののメニュー名を付けることを可能にします。ラベル "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' );
}
これがどのように機能するのかを明確にする必要がある場合は、次のページを上から順に読んでください。
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 );