管理メニュー

PHP

【WordPress】管理メニューの『設定』に独自サブページを追加する方法

更新日:2023/02/13

次の図のように、WordPressの管理メニューの『設定』に独自サブページを追加する方法をお伝えします。

『設定』に追加したサブページ

 

基本は独自ページへの追加と同じ

管理メニューの『設定』に独自サブページを追加する方法は、基本的には独自に作成したページにサブページを追加する方法と同じです。

上記のページでは、次のようなコードを紹介しています。

add_action('admin_menu', 'my_admin_menu');

function my_admin_menu(){
	$slug = 'my_menu';
	add_menu_page( 'myメニュー' , 'myメニュー' , 'manage_options' , $slug
			  , 'echo_my_menu' , '' , 3 );
	add_submenu_page( $slug , 'subメニュー' , 'subメニュー' , 'manage_options' , 'my_sub_menu'
			  , 'echo_my_sub_menu' , '' );
}

このコードのadd_submenu_page()で、サブページを親ページに追加しています。

 

add_options_page()の使用

add_submenu_page()で『設定』に独自サブページを追加する場合、『設定』ページのスラッグを調べる必要があり少し面倒です。

そこで、add_options_page()という『設定』ページ専用のサブページ追加関数が用意されています。

実際には、次のようにadd_submenu_page()を呼び出しているだけです。

function add_options_page( $page_title, $menu_title, $capability, $menu_slug, $callback = '', $position = null ) {
	return add_submenu_page( 'options-general.php', $page_title, $menu_title, $capability, $menu_slug, $callback, $position );
}

引数はadd_submenu_page()と同じですが、挙げておきます。

  • $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:[options-general.php]title[一般]
[1]→slug:[options-writing.php]title[投稿設定]
[2]→slug:[options-reading.php]title[表示設定]
[3]→slug:[options-discussion.php]title[ディスカッション]
[4]→slug:[options-media.php]title[メディア]
[5]→slug:[options-permalink.php]title[パーマリンク]
[6]→slug:[options-privacy.php]title[プライバシー]

【WordPress】管理画面の各メニュー項目の表示位置(番号)・スラッグを確認する。より

左端の数値が位置です。

例えば一般と投稿設定の間にサブメニューを挿入するときは、投稿設定の位置を$positionで指定します。

 

コード例

管理メニューの『設定』に独自サブページを追加する単純な例です。

add_action('admin_menu', function (){

	add_options_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()

WordPressはHTMやCSSの知識も必要。総合的な知識を身につけよう。

更新日:2023/02/13

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。