サブメニューの追加
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 を使って登録したオプションを書き出します。
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_dashboard_page()
–index.php
add_posts_page()
–edit.php
add_media_page()
–upload.php
add_pages_page()
–edit.php?post_type=page
add_comments_page()
–edit-comments.php
add_theme_page()
–themes.php
add_plugins_page()
–plugins.php
add_users_page()
–users.php
add_management_page()
–tools.php
add_options_page()
–options-general.php
add_options_page()
–settings.php
add_links_page()
–link-manager.php
– WordPress 3.5以降ではプラグインが必要です。- カスタム投稿タイプ –
edit.php?post_type=wporg_post_type
- ネットワーク管理 –
settings.php
サブメニューの削除
サブメニューの削除方法は、トップレベルメニューの削除方法とまったく同じです。
フォームの送信
サブメニュー内でのフォーム送信の処理は、トップレベルメニュー内でのフォーム送信とまったく同じです。
add_submenu_page()
は、定義済みのサブメニュー (add_dashboard_page
、add_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 の検証、バリデーション、サニタイズを忘れないでください。