web-dev-qa-db-ja.com

管理者メニュー - サブメニューページのときに最上位メニューをハイライト表示(サブメニューを表示せずに)

これが現在の状況です。

  • 私はトップレベルのメニューページを持つプラグインを書いています
  • プラグインには他のサブメニューページも含まれています
  • サブメニューページには、親スラッグが割り当てられていません(したがって、管理メニューには表示されません)。

私の要求は以下の通りです。

  • 管理メニューにはトップレベルのメニューページのメニュー項目のみがあるようにしてください(サブメニューページのメニュー項目は表示されません)。
  • サブメニューページのときにトップレベルメニューページのメニュー項目をハイライトする

私はサブメニューページに親スラッグをつけることを試みました。もちろん、これはトップレベルのメニュー項目の下に期待通りに表示されるようにします。その後、remove_submenu_pageを使用して、サブメニュー項目を削除しようとしました。ただし、これでサブメニューページ全体が削除されるので、問題は解決しません。

トップレベルのメニュー項目は、アクセスされているページがその下にあることを知っている必要があるので、私は論理的にやるべきことは、親スラッグを与えることです。問題は、サブメニューページのメニュー項目が表示されていないことです。メニュー項目を直接扱う関数が見つかりません。


これは正しいアプローチですか、それとももっと良い選択肢がありますか?必要なことを実行するために利用できるアクション/フィルター/フックはありますか?

#1を編集する:
さらに研究/テストを行いました。 add_submenu_page呼び出しでmenu_titleパラメータをnullまたは ''に設定すると、タイトルは表示されません。ただし、サブメニュー項目を含む<li>はまだ存在しており、対話することができます。多数のサブメニューページがある場合(私の場合のように)、空の<li>要素が追加されてメニュー上に長い空白の領域が作成されます。これは理想からは程遠いので、私はまだ解決策を探しています。

編集#2: @s_ha_dumからのコメントの後に$ submenuグローバルを操作しようとした。ただし、ページに関連するメニューセクションを削除すると、remove_submenu_pageと同様にそのページが削除され、そのページにアクセスできなくなります。

1
Jayawi Perera

それはちょっと遅い答えであり、@ Jayがこれを整理したかどうかはわかりませんが、同じ問題を抱えている人には、これを修正する方法があります。

メニューページ

function my_admin_menu() {

    add_menu_page(
        'Page title',
        'Menu title',
        'manage_options',
        'my_page',
        null,
        null,
        99
    ); 

    add_submenu_page(
        'my_page',
        'Subpage 1 title',
        'Subpage 1 menu title',
        'manage_options',
        'my_subpage_1',
        null
    );

    add_submenu_page(
        'my_page',
        'Subpage 2 title',
        'Subpage 2 menu title',
        'manage_options',
        'my_subpage_2',
        null
    );
}
add_action( 'admin_menu', 'my_admin_menu' ) );

function my_admin_head() {

    remove_submenu_page( 'my_page', 'my_subpage_1' );
}
add_action( 'admin_head', 'my_admin_head' );

remove_submenu_page のコーデックスを参照してください。

1
Askelon