【WordPress】管理メニューの『外観』に独自サブページを追加する方法
更新日:2023/02/13
ほとんど使う機会が無いと思うけれど、WordPressに管理メニューの『外観』に独自サブページを追加する関数が用意されているので使用方法をお伝えします。
概要
独自に作成した親ページにサブページを追加するときは add_submenu_page()を使用しますが、『外観』に追加するときは add_theme_page()を使用します。
実際には、add_theme_page()はadd_submenu_page()に引数をそのまま渡しています。
function add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $callback = '', $position = null ) {
return add_submenu_page( 'themes.php', $page_title, $menu_title, $capability, $menu_slug, $callback, $position );
}
add_theme_page()の構文
add_management_page()の構文は、次のようになっています。
add_theme_page( $page_title, $menu_title, $capability, $menu_slug, $callback = '', $position = null )
- $page_title:
head内のtitleタグに出力される文字列。
- $menu_title:
管理画面左側のメニュー欄に表示される文字列。
- $capability:
メニュー欄に表示するためのユーザー権限。
権限の種類については、次のWordPressサポートページを見てください。
■https://ja.wordpress.org/support/article/roles-and-capabilities/#%e6%a8%a9%e9%99%90 - $menu_slug:
メニューのスラッグ名。
他と重複してはダメ。 - $callback:
メニュー画面のhtmlを生成する関数。
- $position:
左側のメニューに挿入する位置。
整数で指定します。既存メニューの前に挿入されます。
$positionの値
『外観』の各サブメニューの位置は、次のようになっています。
[0]→slug:[themes.php]title[テーマ 0]
[1]→slug:[customize.php?return=%2Fwordpress%2Fwp-admin%2Findex.php]title[カスタマイズ]
[2]→slug:[widgets.php]title[ウィジェット]
[3]→slug:[nav-menus.php]title[メニュー]
[4]→slug:[my_sub_menu]title[subメニュー]
[5]→slug:[theme-editor.php]title[テーマファイルエディター]
左端の数値が位置です。
例えばカスタマイズとウィジェットの間にサブメニューを挿入するときは、ウィジェットの位置を$positionで指定します。
なおこの記事の最初に掲載している画像で、追加したサブページがテーマファイルエディターの前に挿入されています。
※もう一度掲載↓
これは次のように、挿入位置をデフォルト値で指定した結果です。
add_action('admin_menu', function (){
add_theme_page( 'subメニュー' , 'subメニュー' , 'manage_options' , 'my_sub_menu'
, 'echo_my_sub_menu' );
register_setting( 'my_sub_option_group' , 'my_sub_option_1' );
});
デフォルト値で指定すると本来なら最後に挿入されるのですが、『外観』は少し特殊なようです。
テーマファイルエディターは、次のコードのようにadmin_menuアクションで登録されています。
その際の、優先度は101です。
add_action( 'admin_menu', '_add_themes_utility_last', 101 );
function _add_themes_utility_last() {
add_submenu_page(
wp_is_block_theme() ? 'tools.php' : 'themes.php',
__( 'Theme File Editor' ),
__( 'Theme File Editor' ),
'edit_themes',
'theme-editor.php'
);
}
一方、独自サブメニューを登録しているコードは優先度を指定していないので、デフォルト値の10です。
呼び出されるタイミングがテーマファイルエディターよりも早いため、中途半端な位置に挿入されたのです。
もし最後に挿入したいなら、add_theme_page()の$positionに13以上の値を指定するか、admin_menuアクションの3つめの引数(優先度)に102以上を指定しましょう。
とはいえ、『外観』にサブメニューを挿入する人はほとんどいないと思うけれど…
コード例
管理メニューの『外観』に独自サブページを追加する単純な例です。
add_action('admin_menu', function (){
add_theme_page( 'subメニュー' , 'subメニュー' , 'manage_options' , 'my_sub_menu'
, 'echo_my_sub_menu' );
register_setting( 'my_sub_option_group' , 'my_sub_option_1' );
});
function echo_my_sub_menu() {
?>
<div class="wrap">
<h2>subメニュー</h2>
<form method="post" action="options.php">
<?php
settings_fields( 'my_sub_option_group' );
?>
<table class="form-table">
<tr><th scope="row" >項目1</th>
<td>
<?php $value = esc_textarea( get_option('my_sub_option_1','') ); ?>
<textarea id="my_sub_option_1" name="my_sub_option_1" cols="160" rows="7"><?= $value ?></textarea>
</td></tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}
サブメニューの作成方法は、詳しくは次のページを読んでみてください。
その他のサブメニュー追加関数
WordPressはその他の既存メニューにも、専用のサブメニュー追加関数が用意されています。
次の表は、その一覧です。
メニュー名 | 関数 | |
---|---|---|
ダッシュボード | add_dashboard_page() | 解説ページ |
投稿 | add_posts_page() | 解説ページ |
メディア | add_media_page() | 解説ページ |
固定ページ | add_pages_page() | 解説ページ |
コメント | add_comments_page() | 解説ページ |
外観 | add_theme_page() | |
プラグイン | add_plugins_page() | 解説ページ |
ユーザー | add_users_page() | 解説ページ |
ツール | add_management_page() | 解説ページ |
設定 | add_options_page() | 解説ページ |
更新日:2023/02/13
関連記事
スポンサーリンク
記事の内容について
こんにちはけーちゃんです。
説明するのって難しいですね。
「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。
裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。
掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。
ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php
このサイトは、リンクフリーです。大歓迎です。