web-dev-qa-db-ja.com

あるディレクトリで指定されたカスタムサブレベルメニューを別のディレクトリで指定されたカスタムトップレベルメニューに追加する方法

私はトップレベルのメニューを構築し、/ wp-content/pluginsの中のそれ自身のディレクトリの中に存在するプラグインに取り組んでいます。

たとえば、プラグインは次のようになります。

function main_menu() {
  if(function_exists('add_menu_page')) {
   add_menu_page('Main Menu Title', 'Main Menu', 'administrator', 'main-menu-handle', 'menu-display');
  } 
}
add_action('admin_menu', 'main_menu');

将来追加のメニュー項目をプラグインとして作成して、それらが/ wp-content/plugins内の独自のディレクトリに存在するようにしますが、この特定のカスタムメニューに追加する予定です。

理想的には、これらの新しいプラグインは次のように自分自身を登録します。

function register_submenu() {
  if(function_exists('add_submenu_page')) {
    add_submenu_page('main-menu-handle', 'Widget Title', 'Widget', 'administrator', 'widget-handle', 'widget_display');
  }
}
add_action('admin_menu', 'register_submenu');

しかし、WordPressがadmin.phpとページクエリ文字列パラメータを使用してカスタムメニューをナビゲートする方法のせいで、これをうまく機能させることはできないようです。

何か洞察力?

1
Tom

プラグインから別のプラグインに登録されている親項目にサブメニューを追加するのに問題があるようです。

追加のプラグインがそのメニューに項目を追加しようとした時点で親(トップレベル)項目が存在することを確認するために、admin_menuアクションに優先順位を追加します。

トップレベルを追加

add_action('admin_menu', 'main_menu', 100 );

副明細を追加

add_action('admin_menu', 'register_submenu', 105 );

デフォルトの優先度は10なので、2つのコールバックは間違った順序で実行されている可能性があります。

それが役立つかどうかを教えてください。

5
t31os