web-dev-qa-db-ja.com

Add_menu_pageから重複したリンクを削除する方法

下のテーマ管理メニューでは、「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...
4
Scott B

この自動的に作成されたサブメニューを隠すための回避策があります。過去に私はそれをかなり頻繁に使っていましたが、最近私はそれをそのままにしておくこと(または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
}

これはあまりきれいではありませんが、重複したサブメニューを非表示にする唯一の方法を利用できます。

4
Johannes Pille

管理メニューのコーデックスページ

プラグインがそれ自身のトップレベルメニューを作成している状況では、最初のサブメニューは通常トップレベルメニューと同じリンクタイトルを持ち、それゆえリンクは複製されます。重複したリンクタイトルは、parent_slugパラメータとmenu_slugパラメータに同じ値を指定してadd_submenu_page関数を初めて呼び出すことで回避できます。

個人的には、トップバーの名前を変更する以外のことを行うのは悪い習慣だと思います。管理バーの他の部分との一貫性が失われるためです。

6
mor7ifer

これをカバーするべき関数があります:

remove_submenu_page( $plugin_slug, $plugin_slug );
0
David