サブメニューの追加

WordPress管理に新しいサブメニューを追加するには、add_submenu_page()関数を使用します。

  1. add_submenu_page(
  2. string $parent_slug,
  3. string $page_title,
  4. string $menu_title,
  5. string $capability,
  6. string $menu_slug,
  7. callable $function = ''
  8. );

「ツール」トップレベルメニューに「WPOrgオプション」というサブメニューを追加したいとしましょう。

最初のステップは、HTMLを出力する関数を作成することです。この関数では、必要なセキュリティチェックを行い、Settings APIを使用して登録したオプションをレンダリングします。

HTMLを<div>でラップし、wrapクラスを付けることをお勧めします。

  1. function wporg_options_page_html() {
  2. // check user capabilities
  3. if ( ! current_user_can( 'manage_options' ) ) {
  4. return;
  5. }
  6. ?>
  7. <div class="wrap">
  8. <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
  9. <form action="options.php" method="post">
  10. <?php
  11. // output security fields for the registered setting "wporg_options"
  12. settings_fields( 'wporg_options' );
  13. // output setting sections and their fields
  14. // (sections are registered for "wporg", each field is registered to a specific section)
  15. do_settings_sections( 'wporg' );
  16. // output save settings button
  17. submit_button( __( 'Save Settings', 'textdomain' ) );
  18. ?>
  19. </form>
  20. </div>
  21. <?php
  22. }

2番目のステップは、WPOrgオプションのサブメニューを登録することです。登録はadmin_menuアクションフックの間に行う必要があります。

  1. function wporg_options_page()
  2. {
  3. add_submenu_page(
  4. 'tools.php',
  5. 'WPOrg Options',
  6. 'WPOrg Options',
  7. 'manage_options',
  8. 'wporg',
  9. 'wporg_options_page_html'
  10. );
  11. }
  12. add_action('admin_menu', 'wporg_options_page');

パラメータのリストとそれぞれの機能については、リファレンスのadd_submenu_page()を参照してください。

定義済みサブメニュー

WordPressの組み込みトップレベルメニューの$parent_slugを定義するヘルパー関数があれば、ソースコードを手動で探す手間が省けて良いと思いませんか?

以下は親スラッグとそのヘルパー関数のリストです:

サブメニューの削除

サブメニューを削除するプロセスは、トップレベルメニューの削除と全く同じです。

フォームの送信

サブメニュー内でのフォーム送信の処理は、トップレベルメニュー内でのフォーム送信と全く同じです。

  1. ``````bash
  2. function wporg_options_page() {
  3. $hookname = add_submenu_page(
  4. 'tools.php',
  5. 'WPOrg Options',
  6. 'WPOrg Options',
  7. 'manage_options',
  8. 'wporg',
  9. 'wporg_options_page_html'
  10. );
  11. add_action( 'load-' . $hookname, 'wporg_options_page_html_submit' );
  12. }
  13. add_action('admin_menu', 'wporg_options_page');
  14. `

常に、フォームが送信されているかどうかを確認し、CSRF検証、バリデーション、およびサニタイズを忘れないでください。