この記事はブロックされています。続きを読みたい方はログインをして下さい。会員ではない方は新規会員登録をして下さい。


ワードプレスでオリジナルプラグインを作ってみよう その3 管理画面のサイドメニューをカスタマイズする

前回はある特定のページにアクセスがあるとメールが通知されるプラグインを作りましたが、ページの指定や送信するメールアドレスを変更する時はどうすればいいのでしょうか?
これはプラグインのファイルを直接いじる必要がありスマートではありません。

プラグイン専用の管理画面があって、そこから設定を変更出来たほうが便利です。ずっとプラグインらしくなります。設定情報はどこに保存されるかというとデータベースです。一般的に独自のテーブルを作らなければ「wp_options」にプラグインのデータを保存します。

今回は管理画面を作って設定をデータベースに保存する方法の第一歩として、管理画面のサイドメニューをカスタマイズする方法です。

プラグインをインストールすると管理画面を持つタイプのものはサイドメニューの「設定」または「設定」の下に表示されます。
使用するアクションフックは「admin_menu」です。使用する関数は「add_menu_page()」「add_submenu_page()」の2つです。

add_action( 'admin_menu' , 'admin_menu_my_mail_notice' );

上記はアクションフックの「admin_menu」が実行される時に「admin_menu_my_mail_notice関数」を実行するという意味です。「admin_menu_my_mail_notice関数」は独自の関数なので好きな名前で構いません。
「admin_menu_my_mail_notice関数」には管理画面のサイドメニューにメニューを追加する処理を書きます。
追加するメニューは「基本設定」「アンインストール」にしてみます。
追加する場所は「設定」の下のスペースです。コメントを付けておいたので分かりやすいと思います。

//アクションフックのコールバッック関数/////////////////////////////////////////
function admin_menu_my_mail_notice()
{

	//サイドメニューに表示させる
	add_menu_page
	(
		'基本設定',				//クリックした時に表示されるHTMLタイトル名
		'My Mail Notice',		//サイドメニューに表示させる名前(日本語OK)
		8,						//ユーザーレベル 10までありレベル8が一般的な管理レベル
		__FILE__,				//プラグインの一意な識別子 __FILE__でファイル名を使うのが楽
		'my_mail_notice_set',	//クリックしたら実行される関数
		'dashicons-email-alt',	//表示するアイコン名
		99						//サイドメニューに表示させる位置
	);

	//サブメニューを追加する(メニューが複数ある場合)
	add_submenu_page
	(
		__FILE__,				//親メニューの名前 __FILE__ を使うと楽
		'基本設定',				//クリックした時に表示されるHTMLタイトル名
		'基本設定',				//サブメニューで表示させる名前
		8,						//ユーザーレベル 10までありレベル8が一般的な管理レベル
		__FILE__,				//プラグインの一意な識別子 関数名を書くと楽
		'my_mail_notice_set'	//クリックしたら実行される関数
	);

	//サブメニューを追加する(メニューが複数ある場合)
	add_submenu_page
	(
		__FILE__,				//親メニューの名前 __FILE__ を使うと楽
		'アンインストール',		//クリックした時に表示されるHTMLタイトル名
		'アンインストール',		//サブメニューで表示させる名前
		8,						//ユーザーレベル 10までありレベル8が一般的な管理レベル
		'my_mail_notice_del',	//プラグインの一意な識別子 関数名を書くと楽
		'my_mail_notice_del'	//クリックしたら実行される関数
	);

}

解説するとまず「add_menu_page()」でメニューを追加します。
引数は7つあります。

[note]add_menu_page
(
1.クリックした時に表示されるHTMLタイトル名
2.サイドメニューに表示させる名前(日本語OK)
3.ユーザーレベル 10までありレベル8が一般的な管理レベル
4.プラグインの一意な識別子 __FILE__でファイル名を使うのが楽
5.クリックしたら実行される関数
6.表示するアイコン名
7.サイドメニューに表示させる位置
);[/note]

1と2番は分かると思います。3番の「ユーザーレベル」はこのメニューを使えるユーザーの権限です。
ワードプレスのCodexにユーザーレベルのことが書かれています。

▼ユーザーの種類と権限

引用してみます。

[note]ユーザレベルは0から10まであります。0は最低位のレベルであり、10は最高位のレベルです。レベル10は絶対的な権力を有しています。一般的に、ユーザレベルに応じて自分より下位レベルのユーザの投稿を編集・公開できます。ディスカッションの為に、登録とログインを行う全ての来訪者をユーザと呼びます。

レベル10のユーザは管理者権限を有しており、ここでは管理者と呼んでいます。WordPressをインストールする課程で自動的に管理者を作成し、レベル10を割り当てます。全てのユーザをコントロールする絶対的な力を持っている為、多くの場合、レベル10のユーザは一人だけであるべきです。[/note]

で、結局レベルは何にすればいいかというと一般的にはレベル8を割り当てておきます。
登録ユーザーの誰でも使えるようにしたければレベル5にしておきます。普通は危ないので制限しておきます。

4番の「プラグインの一意な識別子」は何でもいいのですが、被らないキーワードでなければなりません。
そんなわけでプラグイン名は基本的には被らないので「__FILE__」定数を割り当てておきます。
「__FILE__」定数は呼び出しているファイル名を取得できます。すなわちこの場面ではプラグイン名に置き換わります。

5番の「クリックしたら実行される関数」はその名の通りクリックしたら実行される関数を指定します。
この中に実際に処理したい内容を書きます。

6番の「表示するアイコン名」は何も指定子なければ歯車アイコンなのですが、最初からインストールされている幾つかのアイコンに変更可能です。アイコン名を指定すれば置き換わります。今回はメール関連なのでメールのアイコンにしています。アイコンの種類については以下のサイトを参考にして下さい。

▼ワードプレスアイコン一覧
http://melchoyce.github.io/dashicons/

7番の「サイドメニューに表示させる位置」は数字で指定します。参考までに番号と位置を記しておきます。

[note]2:ダッシュボード
4:【スペース】
5:投稿
10:メディア
15:リンク
20:固定ページ
25:コメント
59:【スペース】
60:外観
65:プラグイン
70:ユーザー
75:ツール
80:設定
99:【スペース】[/note]

【スペース】と書いてある番号を指定するとその場所に追加されます。また既にある番号を指定すると置き換わります。使えるのは4番と59番と99番となります。

例えば、70番を指定すると「ユーザー」が追加メニューに置き換わってなくなってしまいます。
71番を指定すると「ユーザー」の下にメニューが追加されることになります。
大して使わないプラグインメニューは「設定」に突っ込んでおけばいいのですが、今回は練習用として「設定」には入れずに外に出しておきます。

これでサイドメニューにプラグインメニューを追加できたのですが、困ったことがあります。
追加するメニューが1つだけであればこれでいいのですが、複数ある場合はサブメニューを追加する必要があります。
以下のような感じにすればいいわけです。

サブメニュー
サブメニュー

マウスをあてるとサブメニューが表示されます。
サブメニューは以下のように追加します。

[note]add_submenu_page
(
1.親メニューの名前 __FILE__ を使うと楽
2.クリックした時に表示されるHTMLタイトル名
3.サブメニューで表示させる名前
4.ユーザーレベル 10までありレベル8が一般的な管理レベル
5.プラグインの一意な識別子 関数名を書くと楽
6.クリックしたら実行される関数
);
[/note]

引数は6つあります。アイコンの指定がないだけで「add_menu_page()」とほぼ同じですね。
「add_menu_page()」が親メニューで「add_submenu_page()」が子という関係になります。
親子関係は1番の「親メニューの名前」で指定します。これは「__FILE__」を指定しておけば自動的に親を指定してくれます。因みに他のプラグインで使っている親メニューの識別子を指定すると既にインストールされているプラグインのメニューに勝手に追加できます。

気を付けなければならないのは5番の「プラグインの一意な識別子」です。
これは他のサブメニューと被らない名前にする必要があるので「__FILE__」定数では指定しません。
大抵は6番の関数名(被らないので)と同じ名前にしておきます。
因みに親メニューと同じにすると、親メニューに置き換わります。

同じにしないと一番目のサブメニューは新規に追加されて以下のようになってしまいます。

サブメニュー名がダブってしまう
サブメニュー名がダブってしまう

最初に追加するサブメニューの5番には「__FILE__」といれておけば以下のようになります。

サブメニュー
サブメニュー

これでちょっとハマりました。

では、追加する場所を「設定」などの中にしたい場合はどうすればいいかというと「add_submenu_page()」ではなく「add_option_page()」関数を使います。「add_menu_page」引数は同じです。
他にもこのような関数があるので、好きな場所に追加できます。

[note]add_object_page()………コメントの下に追加される
add_utility_page()………設定の下に追加される
add_dashboard_page()………「ダッシュボード」にサブメニュー追加
add_posts_page()………「投稿」にサブメニューを追加
add_pages_page()………「ページ」にサブメニューを追加
add_media_page()………「メディア」にサブメニューを追加
add_comments_page()………「コメント」にサブメニューを追加
add_plugins_page()………「プラグイン」にサブメニューを追加
add_users_page()………「ユーザー」にサブメニューを追加
add_options_page()………「設定」にサブメニューを追加
add_management_page()………「ツール」にサブメニューを追加
add_theme_page()………「外観」にサブメニューを追加[/note]

もっと詳しい管理メニューの追加についてはCodexを参考にして下さい。

▼管理メニューの追加 Codex

以上をまとめると以下のようになります。

関連記事