私は add_menu_page(...) をカスタムテーマから使用していて、 add_submenu_page(...) を使用してそのメニューにサブページを追加します。私はテーマからそれをやろうとするとそれは期待どおりに動作しますが、私はプラグインから同じことを試みるときそれは何もしません。
メニューが存在する前にプラグインがサブメニューページを追加しようとしている可能性があると思ったので、コードを関数内にラップし、プラグインから add_action(...) を使用しました。カスタムアクションフックは、 do_action(...) を使用して、コードを実行する場所(テーマ内で動作した正確な行)に作成しました。
サンプルコードは次のようになります。
(テーマ)
function wvdh_add_admin_page(){
// The next 2 lines work fine
add_menu_page( 'WVDH - Settings','WVDH', 'manage_options', 'wdvh-startpoint', 'render_page', 'dashicons-admin-network', '109');
add_submenu_page( 'wdvh-startpoint', 'page-title', 'menu-title', 'manage_options', 'menu-slug', 'render_page' );
// The next line does nothing
do_action('wvdh-menu');
}
add_action('admin_menu', 'wvdh_add_admin_page');
function render_page(){
echo '<h1>Test</h1>';
}
(プラグイン)
add_action('admin_menu', 'wvdh_create_menu');
function wvdh_create_menu() {
add_action('wvdh-menu', 'new_subpage');
}
function new_subpage(){
add_submenu_page( 'wvdh-startpoint', 'page-from-plugin', 'menu-from-plugin', 'manage_options', 'plugin-slug', 'wvdh_settings_page' );
}
function wvdh_settings_page() {
echo '<h1>Test from-plugin</h1>';
}
これは間違いです
違う
//wvdh-startpoint
add_submenu_page( 'wvdh-startpoint', 'page-from-plugin', 'menu-from-plugin', 'manage_options', 'plugin-slug', 'wvdh_settings_page' );
正しい
//wdvh-startpoint
add_submenu_page( 'wdvh-startpoint', 'page-from-plugin', 'menu-from-plugin', 'manage_options', 'plugin-slug', 'wvdh_settings_page' );