<p class="wp-block-paragraph">こんにちわ、サイト管理者のわかっち (<a href="https://twitter.com/wakatchi_tech">@wakatchi_tech</a>) です。</p>
<p class="wp-block-paragraph">WordPressで開発したサイトを運営していると、サイト独自の設定を保存したり、運用しながら設定を変更したいことがあります。</p>
<p class="wp-block-paragraph">前回の記事では、WordPressのトップメニューの追加方法をご紹介いたしました。</p>
<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<div class="blog-card">
<div class="blog-card-body-outer">
<div class="blog-card-body">
<h5 class="blog-card-title">
<a href="https://wakatchi.dev/wordpress-admin-dev/">WordPressに独自の管理メニューを追加する① トップメニューの追加</a>
</h5>
<p class="blog-card-text">
WordPress の管理画面に独自のトップメニューを追加する方法を、add_menu_page() の引数・アイコン・表示位置の決め方までコード付きで解説します。add_submenu_page との… </p>
<div class="blog-card-site-title">
<a href="https://wakatchi.dev">
<img loading="lazy" src="https://wakatchi.dev/wp-content/uploads/2025/03/ww-logo2-100x100.webp" width="16" height="16" alt="" >
わかっちウォッチ </a>
</div>
</div>
</div>
<div class="blog-card-image-outer">
<a href="https://wakatchi.dev/wordpress-admin-dev/" class="blog-card-image-frame">
<img class="blog-card-image-src" src="https://wakatchi.dev/wp-content/uploads/2023/01/wordpress-admin-menu1-1024x683.jpg" alt="">
</a>
</div>
</div>
</div></figure>
<p class="wp-block-paragraph">この記事では、以前ご紹介したトップメニューに続き、WordPressのサブメニューの追加方法をご紹介します。</p>
<div class="wp-block-vk-blocks-border-box vk_borderBox vk_borderBox-background-transparent has-text-color has-pale-cyan-blue-color is-style-vk_borderBox-style-solid-kado-tit-tab"><div class="vk_borderBox_title_container has-background has-pale-cyan-blue-background-color"><i class=""></i><h4 class="vk_borderBox_title" id="vk-border-box-579a2f13-a399-405e-b02f-73c812e5d6c4"><strong>この記事は次のような方にお勧めです</strong></h4></div><div class="vk_borderBox_body">
<ul class="wp-block-list is-style-vk-check-mark">
<li>WordPressのサイト開発者で、サイト全体の設定をWordPressの管理メニューで設定したい人</li>
<li>WordPressのテーマやプラグインの開発者</li>
</ul>
</div></div>
<div class="wp-block-vk-blocks-table-of-contents-new vk_tableOfContents vk_tableOfContents-style-default tabs" data-use-custom-levels="false" data-custom-levels=""><div class="tab"><div class="vk_tableOfContents_title">目次</div><button type="button" class="tab-label vk_tableOfContents_openCloseBtn button_status button_status-open" id="vk-tab-label-toc-nmngydy9" aria-expanded="true" aria-controls="vk-toc-content-nmngydy9">CLOSE</button><ul id="vk-toc-content-nmngydy9" class="vk_tableOfContents_list tab_content-open">
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-72f7e078-d4c4-43ba-bdf4-461693a0810f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1. </span>
WordPressに新規のサブメニューを追加する
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-a0074d24-96f0-4e53-9053-366e94d3841e" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.1. </span>
トップメニューにサブメニューを追加する
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-4">
<a href="#vk-htags-93b99a29-bd96-4beb-a0bd-ff5029c8b06f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.1.1. </span>
トップメニューを追加
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-4">
<a href="#vk-htags-5144d950-bc4d-4587-992b-2379b912aa76" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">1.1.2. </span>
サブメニューを追加
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-f8e9439b-5baf-4af3-88fe-294762c466d4" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">2. </span>
既存のトップメニューにサブメニューを追加する
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-4">
<a href="#vk-htags-173b294c-ee6c-472e-8fed-f8a01bec39fe" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">2.1.1. </span>
親スラッグ名の種類
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-5263aeff-2738-4fe6-bd7c-efec23c62477" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">3. </span>
まとめ
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-2">
<a href="#vk-htags-2ef080e6-9c73-4dc9-b63f-f2c486e86767" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4. </span>
よくある質問
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-e363e19f-863e-4e51-8b4c-16749299e6a5" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4.1. </span>
add_menu_page で作ったトップメニューの最初のサブメニューが、親と同じ名前になるのはなぜ?
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-1498ac86-e312-4c32-8b07-945b5747330f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4.2. </span>
既存のメニューに追加したいのですが、親スラッグが分かりません
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-b191ea4c-1917-4825-8553-f4621b8d66e5" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4.3. </span>
サブメニューの画面に設定フォームを作るには?
</a>
</li>
<li class="vk_tableOfContents_list_item vk_tableOfContents_list_item-h-3">
<a href="#vk-htags-f219cced-849e-4e6e-87d6-cf40adb0909f" class="vk_tableOfContents_list_item_link">
<span class="vk_tableOfContents_list_item_link_preNumber">4.4. </span>
トップメニュー自体の作り方は?
</a>
</li>
</ul></div></div>
<h2 id="vk-htags-72f7e078-d4c4-43ba-bdf4-461693a0810f" class="wp-block-heading">WordPressに新規のサブメニューを追加する</h2>
<p class="wp-block-paragraph"><strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_submenu_page</span></strong>() は、既存または新規のトップメニューにサブメニュー(管理画面のページ)を追加するWordPress関数です。単体で使う場合の書式は次のとおりです。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code>add_submenu_page(
$parent_slug,
$page_title,
$menu_title,
$capability,
$menu_slug,
$callback
);</code></pre></div>
<ul class="wp-block-list">
<li>$parent_slug(必須):サブメニューを組み込む親メニューのスラッグ</li>
<li>$page_title(必須):ページのタイトル</li>
<li>$menu_title(必須):管理画面のメニューに表示されるテキスト</li>
<li>$capability(必須):このメニューを表示するために必要な権限</li>
<li>$menu_slug(必須):このメニューを参照するスラッグ</li>
<li>$callback(任意):ページの内容を出力する関数</li>
</ul>
<p class="wp-block-paragraph">それぞれの引数の詳細や、実際の実装例は以降で解説します。</p>
<p class="wp-block-paragraph">WordPressの管理コンソールに追加した「トップメニューサンプル」という管理メニューに、「サブメニューサンプル」というサブメニューを追加します。サブメニューとは、トップメニューに含まれるページです。</p>
<figure class="wp-block-image size-full"><img src="https://wakatchi.dev/wp-content/uploads/2023/02/e8b22e1c2763a78ffba3cc29b12f4d1f.png" alt="WordPress管理画面にサブメニューが追加された状態のスクリーンショット" class="wp-image-576"/></figure>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">下記のソースコードでWordPressにサブメニューを組み込めます。<br>function.phpや<a href="https://ja.wordpress.org/plugins/code-snippets/" data-type="link" data-id="https://ja.wordpress.org/plugins/code-snippets/">Code Snippetsプラグイン</a>などを使ってそのままコピペしてみてください。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP"><code><?php
add_action(
'admin_menu',
function(){
add_menu_page(
'管理メニュータイトル' ,
'トップメニューサンプル' ,
'manage_options' ,
'top_menu_sample' ,
'render_topmenu_contents' ,
'dashicons-calendar' ,
0
);
add_submenu_page(
'top_menu_sample' ,
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'sub_menu_sample' ,
'render_submenu_contents'
);
}
);
function render_topmenu_contents() {
?>
<div class="wrap">
<h1>トップメニュー設定</h1>
<p>Hello admin TOP menu !!</p>
</div>
<?php
}
function render_submenu_contents() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}
</code></pre></div>
<p class="wp-block-paragraph"></p>
<h3 id="vk-htags-a0074d24-96f0-4e53-9053-366e94d3841e" class="wp-block-heading">トップメニューにサブメニューを追加する</h3>
<p class="wp-block-paragraph"><strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_menu_page</span></strong>()で作成したトップメニューに、<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_submenu_page</span></strong>()を使うことでサブメニューを組み込めます。</p>
<h4 id="vk-htags-93b99a29-bd96-4beb-a0bd-ff5029c8b06f" class="wp-block-heading">トップメニューを追加</h4>
<p class="wp-block-paragraph">管理メニューを追加するための関数を、<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_action</span></strong>()でフック名<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">admin_menu</span></strong>に追加します。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP" data-line="2,3"><code><?php
add_action(
'admin_menu',
function(){
// your code
}
);</code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">管理メニューを追加する関数に、<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_menu_page</span></strong>()に使って管理メニューを追加を実装します。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP" data-line="2"><code><?php
add_menu_page(
'管理メニュータイトル' ,
'トップメニューサンプル' ,
'manage_options' ,
'top_menu_sample' ,
'render_topmenu_contents' ,
'dashicons-calendar' ,
0
);
function render_topmenu_contents() {
?>
<div class="wrap">
<h1>トップメニュー設定</h1>
<p>Hello admin TOP menu !!</p>
</div>
<?php
}</code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph"><strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_menu_page</span></strong>()の引数や戻り値については、前回の記事をご参照ください。</p>
<figure class="wp-block-embed is-type-wp-embed"><div class="wp-block-embed__wrapper">
<div class="blog-card">
<div class="blog-card-body-outer">
<div class="blog-card-body">
<h5 class="blog-card-title">
<a href="https://wakatchi.dev/wordpress-admin-dev/">WordPressに独自の管理メニューを追加する① トップメニューの追加</a>
</h5>
<p class="blog-card-text">
WordPress の管理画面に独自のトップメニューを追加する方法を、add_menu_page() の引数・アイコン・表示位置の決め方までコード付きで解説します。add_submenu_page との… </p>
<div class="blog-card-site-title">
<a href="https://wakatchi.dev">
<img loading="lazy" src="https://wakatchi.dev/wp-content/uploads/2025/03/ww-logo2-100x100.webp" width="16" height="16" alt="" >
わかっちウォッチ </a>
</div>
</div>
</div>
<div class="blog-card-image-outer">
<a href="https://wakatchi.dev/wordpress-admin-dev/" class="blog-card-image-frame">
<img class="blog-card-image-src" src="https://wakatchi.dev/wp-content/uploads/2023/01/wordpress-admin-menu1-1024x683.jpg" alt="">
</a>
</div>
</div>
</div></figure>
<h4 id="vk-htags-5144d950-bc4d-4587-992b-2379b912aa76" class="wp-block-heading">サブメニューを追加</h4>
<p class="wp-block-paragraph">追加した管理メニューに、<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_submenu_page</span></strong>()に使ってサブメニューを追加します。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP" data-line="2"><code><?php
add_submenu_page(
'top_menu_sample' ,
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'sub_menu_sample' ,
'render_submenu_contents'
);
function render_submenu_contents() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}</code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">それでは<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_submenu_page</span></strong>()の仕様を見てみましょう。</p>
<div class="wp-block-vk-blocks-border-box vk_borderBox vk_borderBox-background-transparent has-text-color has-vivid-cyan-blue-color is-style-vk_borderBox-style-solid-kado-tit-banner"><div class="vk_borderBox_title_container has-background has-vivid-cyan-blue-background-color"><i class=""></i><h4 class="vk_borderBox_title" id="vk-border-box-3f32a84f-e0f7-4473-8635-69cf74394c12"><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter"><strong>add_submenu_page</strong></span>()の引数</h4></div><div class="vk_borderBox_body">
<ul class="wp-block-list">
<li>$parent_slug(<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">必須</mark></strong>)<br>サブメニューを組み込む親スラッグ名。</li>
<li>$page_title(<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">必須</mark></strong>)<br>サブメニューのページタイトル。<br>本記事では、管理コンソールの左側に「テスト用トップメニュー」と表示されます。</li>
<li>$menu_title(<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">必須</mark></strong>)<br>メニューのタイトルに使用するテキスト。<br>本記事では、管理コンソールの左側に「テスト用トップメニュー」と表示されます。</li>
<li>$capability(<strong><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color">必須</mark></strong>)<br>このメニューをユーザーに表示するために必要な権限。<br>本記事では、管理メニューへのアクセスを許可するmanged_options権限を付与しています。</li>
<li>$menu_slug(<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-vivid-red-color"><strong>必須</strong></mark>)<br>このメニューを参照するスラッグ名。<br>このメニューページに対して一意である必要があります。また、使用できる文字は 小文字の英数字、ダッシュ、およびアンダースコア文字のみです。$parent_slugで指定した文字を指定すると、トップメニューのデフォルトがサブメニューの画面になります。</li>
<li>$function(任意)<br>このページのコンテンツを出力するために呼び出される関数。</li>
</ul>
<ul class="wp-block-list">
<li>$hook_suffix<br>この管理メニューで表示されるページの処理結果を受け取る関数の接頭子。</li>
</ul>
</div></div>
<p class="wp-block-paragraph"></p>
<h2 id="vk-htags-f8e9439b-5baf-4af3-88fe-294762c466d4" class="wp-block-heading">既存のトップメニューにサブメニューを追加する</h2>
<p class="wp-block-paragraph"><strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_submenu_page</span></strong>()の親スラッグ名を指定することで、WordPressに組み込まれている既存のトップメニューに、サブメニューを追加することができます。</p>
<figure class="wp-block-image size-large"><img src="https://wakatchi.dev/wp-content/uploads/2023/02/wordpress-admin-menu-submenu-ex_01-987x1024.png" alt="WordPress既存のトップメニューにサブメニューが組み込まれた例のスクリーンショット" class="wp-image-596"/></figure>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">下記のソースコードで既存のトップメニューにサブメニューを組み込めます。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP" data-line="5"><code><?php
add_action(
'admin_menu',
function(){
add_submenu_page(
'options-general.php', // 組み込みのトップメニュー
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'sub_menu_sample' ,
'render_submenu_contents'
);
}
);
function render_submenu_contents() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}
</code></pre></div>
<p class="wp-block-paragraph"></p>
<p class="wp-block-paragraph">管理メニューをクリックした時に表示される画面を、サブメニューすることができます。</p>
<h3 class="wp-block-heading">add_submenu_page() だけを使った最小実装例</h3>
<p class="wp-block-paragraph"><strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_menu_page</span></strong>() を呼ばずに<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_submenu_page</span></strong>() だけでサブメニューを追加したい場合は、既存のトップメニューのスラッグを親スラッグに指定します。以下はそのままコピペで動作する最小構成です。</p>
<div class="hcb_wrap"><pre class="prism line-numbers lang-php" data-lang="PHP" data-line="3"><code><?php
add_action(
'admin_menu',
function(){
add_submenu_page(
'tools.php' , // 組み込みの「ツール」メニュー
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'my_tools_submenu' ,
'render_my_tools_submenu'
);
}
);
function render_my_tools_submenu() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}</code></pre></div>
<p class="wp-block-paragraph">function.phpに貼り付けるだけで、管理画面の「ツール」メニュー配下にサブメニューが追加されます。<strong><span data-color="#fcb900" style="background: linear-gradient(transparent 60%,rgba(252, 185, 0, 0.7) 0);" class="vk_highlighter">add_menu_page</span></strong>() を呼ばなくても動作する点がポイントです。</p>
<h3 id="vk-htags-173b294c-ee6c-472e-8fed-f8a01bec39fe" class="wp-block-heading">親スラッグ名の種類</h3>
<p class="wp-block-paragraph">前述のソースコードは、元々組み込まれている設定メニューに組み込みました。</p>
<p class="wp-block-paragraph">親スラッグを変えることで他の組み込みメニューにもサブメニューを追加できますので、ぜひ試してみてください。</p>
<figure class="wp-block-table is-style-vk-table-border-stripes"><table><tbody><tr><td>ダッシュボード</td><td>index.php</td></tr><tr><td>投稿</td><td>edit.php</td></tr><tr><td>メディア</td><td>upload.php</td></tr><tr><td>固定ページ</td><td>edit.php?post_type=page</td></tr><tr><td>コメント</td><td>edit-comments.php</td></tr><tr><td>テーマ</td><td>themes.php</td></tr><tr><td>プラグイン</td><td>plugins.php</td></tr><tr><td>ユーザ</td><td>users.php</td></tr><tr><td>ツール</td><td>tools.php</td></tr><tr><td>設定</td><td>options-general.php</td></tr></tbody></table><figcaption class="wp-element-caption">親スラッグ名のリスト</figcaption></figure>
<h2 id="vk-htags-5263aeff-2738-4fe6-bd7c-efec23c62477" class="wp-block-heading">まとめ</h2>
<p class="wp-block-paragraph">今回は、WordPressの管理コンソールにサブメニューを追加する方法をご紹介しました。トップメニューと同様にPHPによる実装が必要ですが、思ったよりも簡単だったかと思います。</p>
<p class="wp-block-paragraph">次回からメニューページでの設定更新やデータのダウンロードなど、より実践的な方法を記載していきます。</p>
<div class="wp-block-vk-blocks-balloon vk_balloon vk_balloon-position-left vk_balloon-type-speech vk_balloon-animation-none"><div class="vk_balloon_icon"><figure><img class="vk_balloon_icon_image vk_balloon_icon_image-type-normal " src="https://wakatchi.dev/wp-content/uploads/2022/07/wakatchi_icon_2.jpg" alt=""/><figcaption class="vk_balloon_icon_name">わかっち</figcaption></figure></div><div class="vk_balloon_content_outer"><div class="vk_balloon_content has-background-color has-luminous-vivid-amber-background-color vk_balloon_content_fullwidth"><span class="vk_balloon_content_before has-text-color has-luminous-vivid-amber-color"></span><span class="vk_balloon_content_after "></span>
<p class="wp-block-paragraph">管理メニューを作る目的は、運用に関する設定の保存やサイト運営者によるデータの取得だからね。</p>
</div></div></div>
<h2 id="vk-htags-2ef080e6-9c73-4dc9-b63f-f2c486e86767" class="wp-block-heading">よくある質問</h2>
<h3 id="vk-htags-e363e19f-863e-4e51-8b4c-16749299e6a5" class="wp-block-heading">add_menu_page で作ったトップメニューの最初のサブメニューが、親と同じ名前になるのはなぜ?</h3>
<p class="wp-block-paragraph"><code>add_menu_page()</code> はトップメニューを作ると同時に、同じスラッグの最初のサブメニューを自動で作ります。名前を変えたいときは、親と同じスラッグを<code>parent_slug</code> と <code>menu_slug</code> の両方に渡して <code>add_submenu_page()</code> を呼ぶと上書きできます。</p>
<h3 id="vk-htags-1498ac86-e312-4c32-8b07-945b5747330f" class="wp-block-heading">既存のメニューに追加したいのですが、親スラッグが分かりません</h3>
<p class="wp-block-paragraph">本記事の「親スラッグ名の種類」で一覧にしています。設定は <code>options-general.php</code>、ツールは <code>tools.php</code>、外観は <code>themes.php</code> です。カスタム投稿タイプの下に付けたい場合は <code>edit.php?post_type=スラッグ</code> を指定します。</p>
<h3 id="vk-htags-b191ea4c-1917-4825-8553-f4621b8d66e5" class="wp-block-heading">サブメニューの画面に設定フォームを作るには?</h3>
<p class="wp-block-paragraph">Settings API を使います。<code>register_setting()</code> で保存先を登録し、<code>add_settings_section()</code> でセクション、<code>add_settings_field()</code> で項目を定義します。画面側では <code>settings_fields()</code> と <code>do_settings_sections()</code> を呼ぶだけでフォームが出ます。</p>
<h3 id="vk-htags-f219cced-849e-4e6e-87d6-cf40adb0909f" class="wp-block-heading">トップメニュー自体の作り方は?</h3>
<p class="wp-block-paragraph"><a href="https://wakatchi.dev/wordpress-admin-dev/">WordPressに独自の管理メニューを追加する① トップメニューの追加</a>で解説しています。<code>add_menu_page()</code> の引数とアイコンの指定まで扱っています。</p>
<p class="wp-block-paragraph"><span style="font-size: 12pt;">本記事が少しでもお役に立てれば幸いです。</span></p>
<p class="wp-block-paragraph"><span style="font-size: 12pt;">最後までお読みいただき、ありがとうございました!</span></p>
こんにちわ、サイト管理者のわかっち (@wakatchi_tech) です。
WordPressで開発したサイトを運営していると、サイト独自の設定を保存したり、運用しながら設定を変更したいことがあります。
前回の記事では、WordPressのトップメニューの追加方法をご紹介いたしました。
WordPress の管理画面に独自のトップメニューを追加する方法を、add_menu_page() の引数・アイコン・表示位置の決め方までコード付きで解説します。add_submenu_page との…
この記事では、以前ご紹介したトップメニューに続き、WordPressのサブメニューの追加方法をご紹介します。
この記事は次のような方にお勧めです
- WordPressのサイト開発者で、サイト全体の設定をWordPressの管理メニューで設定したい人
- WordPressのテーマやプラグインの開発者
add_submenu_page() は、既存または新規のトップメニューにサブメニュー(管理画面のページ)を追加するWordPress関数です。単体で使う場合の書式は次のとおりです。
add_submenu_page(
$parent_slug,
$page_title,
$menu_title,
$capability,
$menu_slug,
$callback
);
- $parent_slug(必須):サブメニューを組み込む親メニューのスラッグ
- $page_title(必須):ページのタイトル
- $menu_title(必須):管理画面のメニューに表示されるテキスト
- $capability(必須):このメニューを表示するために必要な権限
- $menu_slug(必須):このメニューを参照するスラッグ
- $callback(任意):ページの内容を出力する関数
それぞれの引数の詳細や、実際の実装例は以降で解説します。
WordPressの管理コンソールに追加した「トップメニューサンプル」という管理メニューに、「サブメニューサンプル」というサブメニューを追加します。サブメニューとは、トップメニューに含まれるページです。
下記のソースコードでWordPressにサブメニューを組み込めます。
function.phpやCode Snippetsプラグインなどを使ってそのままコピペしてみてください。
<?php
add_action(
'admin_menu',
function(){
add_menu_page(
'管理メニュータイトル' ,
'トップメニューサンプル' ,
'manage_options' ,
'top_menu_sample' ,
'render_topmenu_contents' ,
'dashicons-calendar' ,
0
);
add_submenu_page(
'top_menu_sample' ,
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'sub_menu_sample' ,
'render_submenu_contents'
);
}
);
function render_topmenu_contents() {
?>
<div class="wrap">
<h1>トップメニュー設定</h1>
<p>Hello admin TOP menu !!</p>
</div>
<?php
}
function render_submenu_contents() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}
add_menu_page()で作成したトップメニューに、add_submenu_page()を使うことでサブメニューを組み込めます。
管理メニューを追加するための関数を、add_action()でフック名admin_menuに追加します。
<?php
add_action(
'admin_menu',
function(){
// your code
}
);
管理メニューを追加する関数に、add_menu_page()に使って管理メニューを追加を実装します。
<?php
add_menu_page(
'管理メニュータイトル' ,
'トップメニューサンプル' ,
'manage_options' ,
'top_menu_sample' ,
'render_topmenu_contents' ,
'dashicons-calendar' ,
0
);
function render_topmenu_contents() {
?>
<div class="wrap">
<h1>トップメニュー設定</h1>
<p>Hello admin TOP menu !!</p>
</div>
<?php
}
add_menu_page()の引数や戻り値については、前回の記事をご参照ください。
WordPress の管理画面に独自のトップメニューを追加する方法を、add_menu_page() の引数・アイコン・表示位置の決め方までコード付きで解説します。add_submenu_page との…
追加した管理メニューに、add_submenu_page()に使ってサブメニューを追加します。
<?php
add_submenu_page(
'top_menu_sample' ,
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'sub_menu_sample' ,
'render_submenu_contents'
);
function render_submenu_contents() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}
それではadd_submenu_page()の仕様を見てみましょう。
add_submenu_page()の引数
- $parent_slug(必須)
サブメニューを組み込む親スラッグ名。
- $page_title(必須)
サブメニューのページタイトル。
本記事では、管理コンソールの左側に「テスト用トップメニュー」と表示されます。
- $menu_title(必須)
メニューのタイトルに使用するテキスト。
本記事では、管理コンソールの左側に「テスト用トップメニュー」と表示されます。
- $capability(必須)
このメニューをユーザーに表示するために必要な権限。
本記事では、管理メニューへのアクセスを許可するmanged_options権限を付与しています。
- $menu_slug(必須)
このメニューを参照するスラッグ名。
このメニューページに対して一意である必要があります。また、使用できる文字は 小文字の英数字、ダッシュ、およびアンダースコア文字のみです。$parent_slugで指定した文字を指定すると、トップメニューのデフォルトがサブメニューの画面になります。
- $function(任意)
このページのコンテンツを出力するために呼び出される関数。
- $hook_suffix
この管理メニューで表示されるページの処理結果を受け取る関数の接頭子。
add_submenu_page()の親スラッグ名を指定することで、WordPressに組み込まれている既存のトップメニューに、サブメニューを追加することができます。
下記のソースコードで既存のトップメニューにサブメニューを組み込めます。
<?php
add_action(
'admin_menu',
function(){
add_submenu_page(
'options-general.php', // 組み込みのトップメニュー
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'sub_menu_sample' ,
'render_submenu_contents'
);
}
);
function render_submenu_contents() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}
管理メニューをクリックした時に表示される画面を、サブメニューすることができます。
add_submenu_page() だけを使った最小実装例
add_menu_page() を呼ばずにadd_submenu_page() だけでサブメニューを追加したい場合は、既存のトップメニューのスラッグを親スラッグに指定します。以下はそのままコピペで動作する最小構成です。
<?php
add_action(
'admin_menu',
function(){
add_submenu_page(
'tools.php' , // 組み込みの「ツール」メニュー
'サブメニュータイトル' ,
'サブメニューサンプル' ,
'manage_options' ,
'my_tools_submenu' ,
'render_my_tools_submenu'
);
}
);
function render_my_tools_submenu() {
?>
<div class="wrap">
<h1>サブメニュー設定</h1>
<p>Hello admin SUB menu !!</p>
</div>
<?php
}
function.phpに貼り付けるだけで、管理画面の「ツール」メニュー配下にサブメニューが追加されます。add_menu_page() を呼ばなくても動作する点がポイントです。
前述のソースコードは、元々組み込まれている設定メニューに組み込みました。
親スラッグを変えることで他の組み込みメニューにもサブメニューを追加できますので、ぜひ試してみてください。
| ダッシュボード | index.php |
| 投稿 | edit.php |
| メディア | upload.php |
| 固定ページ | edit.php?post_type=page |
| コメント | edit-comments.php |
| テーマ | themes.php |
| プラグイン | plugins.php |
| ユーザ | users.php |
| ツール | tools.php |
| 設定 | options-general.php |
親スラッグ名のリスト
今回は、WordPressの管理コンソールにサブメニューを追加する方法をご紹介しました。トップメニューと同様にPHPによる実装が必要ですが、思ったよりも簡単だったかと思います。
次回からメニューページでの設定更新やデータのダウンロードなど、より実践的な方法を記載していきます。
わかっち
管理メニューを作る目的は、運用に関する設定の保存やサイト運営者によるデータの取得だからね。
add_menu_page() はトップメニューを作ると同時に、同じスラッグの最初のサブメニューを自動で作ります。名前を変えたいときは、親と同じスラッグをparent_slug と menu_slug の両方に渡して add_submenu_page() を呼ぶと上書きできます。
本記事の「親スラッグ名の種類」で一覧にしています。設定は options-general.php、ツールは tools.php、外観は themes.php です。カスタム投稿タイプの下に付けたい場合は edit.php?post_type=スラッグ を指定します。
Settings API を使います。register_setting() で保存先を登録し、add_settings_section() でセクション、add_settings_field() で項目を定義します。画面側では settings_fields() と do_settings_sections() を呼ぶだけでフォームが出ます。
WordPressに独自の管理メニューを追加する① トップメニューの追加で解説しています。add_menu_page() の引数とアイコンの指定まで扱っています。
本記事が少しでもお役に立てれば幸いです。
最後までお読みいただき、ありがとうございました!