自分自身でWordpress をカスタマイズしているので備忘録として

管理画面にメニューを追加する方法

/** * 管理画面にメニューを追加 * 
* 第1引数:メニューが選択されたとき、ページのタイトルタグに表示されるテキスト
* 第2引数:メニューとして表示されるテキスト
* 第3引数:メニューを表示するために必要な権限
* 第4引数:メニューのスラッグ名 (プラグインならファイル名?)
* 第5引数:(任意)メニューページを表示する際に実行される関数
*/

// 管理メニューに「例文メニュ」を追加
function add_custom_menu()
{
add_menu_page( 'カスタム自作画面', 'カスタム', 'read', 'ファイル名','自作関数名');
}
add_action( 'admin_menu', 'add_custom_menu' );

備忘録ようなので僕が分かるようにしか書いていません。

多分本職の人からすればアホみたいなコードだと思う。

スポーサードリンク

管理画面に追加したメニューにサブメニューをぶら下げる


/** * 管理画面にサブメニューを追加 *
* 第1引数:親メニューのスラッグ名
* 第2引数:メニューが選択されたとき、ページのタイトルタグに表示されるテキスト
* 第3引数:メニューとして表示されるテキスト
* 第4引数:メニューを表示するために必要な権限
* 第5引数:サブメニューのスラッグ名 (プラグインならファイル名?)
* 第6引数:(任意)メニューページを表示する際に実行される関数
*/

function ybp_sdm_downloads_make_add_pages()
{

add_submenu_page('メインメニューのファイル名','カスタム自作画面','カスタム','read','メインメニューのファイル名','自作関数名',1);
add_submenu_page('メインメニューのファイル名','カスタム自作画面2','カスタム2','read','サブメニューのファイル名1','自作関数名2',2);
add_submenu_page('メインメニューのファイル名','カスタム自作画面2','カスタム3','read','サブメニューのファイル名2','自作関数名3',3);
}
add_action('admin_menu', 'add_submenu_pages');

今回はプラグインとして作成して、画面ごとのにファイルを分けたのでこういう書き方になったのだと思う。

同1つファイルで作成する場合はfunction.phpに記述する場合はまた書き方が違うと思う。

自分なりの解釈と解説

元々は別々のプラグインとして作ってメニューを増やしていたが多くなってきたのでメニューを纏めようと思ったのが始まり。

メニューにまとめようと思ったときにサブになる1番目と2番目のプラグインのコメントを消してメインのプラグイン用のファイルに下記のコードを追加

/* Your code... */
@include_once('サブメニューのファイル名1');
@include_once('サブメニューのファイル名2');

この記述をしたことでメインのプラグインのファイルからもサブ1、サブ2に記述している関数を呼び出せることになった。

次にサブメニューの登録用の関数のadd_submenu_pageの第1引数、親メニューのスラッグのつまづく。

add_menu_pageの第4引数が多分add_submenu_pageの第1引数になるのは分かるが__FILE__としているので実際のスラッグ名が分からなかった。

そこで__FILE__で,文字列で適当に名前を付けてみた。

メインメニューは問題なく動いたが、なぜからサブメニューは追加されなかった。

そこからいろいろ試行錯誤した結果、わからないのでadd_menu_pageの第4引数を__FILE__に戻して実行したあとのURLを見る事にした。

そうするとURLが「https://example.com/wp-admin/admin.php?page=プラグイン名/ファイル名」になっていたのでadd_submenu_pageの第1引数をプラグイン名/ファイル名にして、第5引数をプラグイン名/サブメニューのファイル名にしてみたら動作した。

どこかに配布する用のプラグインではないのでこれでいいかなとも思う。

サブメニューの追加用の関数で1行目にサブメニューとしてメインメニューと同じものを追加している。

これを入れないの自分の思うような動作をしてくれなかったからだ。

冒頭にも書いたが備忘録なので、とりあえず僕はこの方法メニューを追加して管理画面に独自の画面を追加することはできた。

WordPressのカスタマイズで悩んでいる人の一助になっらたらいいなと思う。