web-dev-qa-db-ja.com

テーマで作成された設定ページにプラグインから設定サブページを追加するにはどうすればいいですか?

私は 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>';
}
1
Rubén Marrero

これは間違いです

違う

//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' );
2
Sumit