下のテーマ管理メニューでは、「MyTheme Menu Label」がサイドバーメニューに2回複製されています。1回はメインメニューリンク用、もう1回は最初のサブメニューリンク用です。
リンクの2番目のインスタンスを削除する方法
add_menu_page(
"MyTheme",
"MyTheme Menu Label", //THIS IS REPEATED TWICE IN THE MENU
"edit_themes",
"functions.php",
'theme_admin',
get_bloginfo('template_directory') .'/img/favicon.png',31
);
add_submenu_page(
'functions.php',
"SEO Options",
"SEO",
'edit_themes',
'my-seo-options',
'theme_admin'
);
add_submenu_page(
'functions.php',
"Misc Options",
"Misc",
'edit_themes',
'my-misc-options',
'theme_admin'
);
//etc...
この自動的に作成されたサブメニューを隠すための回避策があります。過去に私はそれをかなり頻繁に使っていましたが、最近私はそれをそのままにしておくこと(またはm0r7if3rが示唆するようにそれを改名すること)に戻りました。
また、念のために、add_menu_page
の menu_slug と function の引数の位置を入れ替えました。参考として codex を参照してください。
これはどういうわけかそれが行われる方法です:
/* Add top level menu */
add_menu_page(
'MyTheme',
'MyTheme Menu Label',
'edit_themes',
'theme_admin', // menu slug
'functions.php', // function
get_bloginfo('template_directory') .'/img/favicon.png',
31
);
/* remove duplicate menu hack */
add_submenu_page(
'theme_admin', // parent slug, same as above menu slug
'', // empty page title
'', // empty menu title
'edit_themes', // same capability as above
'theme_admin', // same menu slug as parent slug
'functions.php', // same function as above
}
これはあまりきれいではありませんが、重複したサブメニューを非表示にする唯一の方法を利用できます。
プラグインがそれ自身のトップレベルメニューを作成している状況では、最初のサブメニューは通常トップレベルメニューと同じリンクタイトルを持ち、それゆえリンクは複製されます。重複したリンクタイトルは、parent_slugパラメータとmenu_slugパラメータに同じ値を指定してadd_submenu_page関数を初めて呼び出すことで回避できます。
個人的には、トップバーの名前を変更する以外のことを行うのは悪い習慣だと思います。管理バーの他の部分との一貫性が失われるためです。
これをカバーするべき関数があります:
remove_submenu_page( $plugin_slug, $plugin_slug );