サブメニュー

サブメニューの追加

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

add_submenu_page(
  string $parent_slug,
  string $page_title,
  string $menu_title,
  string $capability,
  string $menu_slug,
  callable $function = ''
);

たとえば、「ツール」のトップレベルメニューに “WPOrg Options” というサブメニューを追加したいとします。

第一のステップ では、HTML を出力する関数を作成します。この関数では、必要なセキュリティチェックを行い、設定 API を使って登録したオプションを書き出します。

HTML をラップするには、クラスが wrap の <div> を使用することをおすすめします。
function wporg_options_page_html() {
  // check user capabilities
  if ( ! current_user_can( 'manage_options' ) ) {
    return;
  }
  ?>
  <div class="wrap">
    <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
    <form action="options.php" method="post">
      <?php
      // output security fields for the registered setting "wporg_options"
      settings_fields( 'wporg_options' );
      // output setting sections and their fields
      // (sections are registered for "wporg", each field is registered to a specific section)
      do_settings_sections( 'wporg' );
      // output save settings button
      submit_button( __( 'Save Settings', 'textdomain' ) );
      ?>
    </form>
  </div>
  <?php
}

第二のステップ では、WPOrg オプションサブメニューを登録します。この登録は admin_menu アクションフックで行う必要があります。

function wporg_options_page() {
  add_submenu_page(
    'tools.php',
    'WPOrg Options',
    'WPOrg Options',
    'manage_options',
    'wporg',
    'wporg_options_page_html'
  );
}
add_action( 'admin_menu', 'wporg_options_page' );

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

定義済みサブメニュー

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

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

サブメニューの削除

サブメニューの削除方法は、トップレベルメニューの削除方法とまったく同じです。

フォームの送信

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

add_submenu_page() は、定義済みのサブメニュー (add_dashboard_pageadd_posts_page など) のすべての関数と一緒に $hookname を返し、カスタムページ内のフォーム送信を処理するために add_action の最初のパラメータとして使用できます:

function wporg_options_page() {
  $hookname = add_submenu_page(
    'tools.php',
    'WPOrg Options',
    'WPOrg Options',
    'manage_options',
    'wporg',
    'wporg_options_page_html'
    );

  add_action( 'load-' . $hookname, 'wporg_options_page_html_submit' );
}

add_action( 'admin_menu', 'wporg_options_page' );

例によって、フォームが送信されているかどうかのチェック、CSRF の検証、バリデーションサニタイズを忘れないでください。

原文 / 日本語訳

s
検索
c
新規投稿を作成する
r
返信
e
編集
t
ページのトップへ
j
次の投稿やコメントに移動
k
前の投稿やコメントに移動
o
コメントの表示を切替
esc
投稿やコメントの編集をキャンセル