サブメニューの追加
WordPress管理に新しいサブメニューを追加するには、add_submenu_page()
関数を使用します。
add_submenu_page(
string $parent_slug,
string $page_title,
string $menu_title,
string $capability,
string $menu_slug,
callable $function = ''
);
例
「ツール」トップレベルメニューに「WPOrgオプション」というサブメニューを追加したいとしましょう。
最初のステップは、HTMLを出力する関数を作成することです。この関数では、必要なセキュリティチェックを行い、Settings APIを使用して登録したオプションをレンダリングします。
HTMLを<div>
でラップし、wrap
クラスを付けることをお勧めします。
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
}
2番目のステップは、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
– WP 3.5+以降はプラグインが必要 - カスタム投稿タイプ –
edit.php?post_type=wporg_post_type
- ネットワーク管理 –
settings.php
サブメニューの削除
サブメニューを削除するプロセスは、トップレベルメニューの削除と全く同じです。
フォームの送信
サブメニュー内でのフォーム送信の処理は、トップレベルメニュー内でのフォーム送信と全く同じです。
``````bash
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検証、バリデーション、およびサニタイズを忘れないでください。