[wordpress] Biz Calendarの権限を編集者にも与えるときは注意

お店のサイトなどをwordpressで構築する際に、営業日用のカレンダーとして候補にあがる「Biz Calendar」。

日本語だし設定も楽なので使う人も結構多いのではないでしょうか。

ただ、カレンダーを設定できる権限は管理者のみになっていて、ソースコードを見る限り直に修正しないといけない模様。

public function on_admin_menu() {
	$page = add_options_page("Biz Calendar設定", "Biz Calendar設定", 'administrator', __FILE__, array(&$this, 'show_admin_page'));
}

クライアントには管理者権限は渡したくないけど、カレンダーだけは設定させたいなんて人は結構やり方を検索しているのではないかと思い(自分もそうでした)注意点を書いておきます。

タイトルにある通り、「biz calendar 権限 編集者」なんかで検索すると出てくるサイトには上記のコードを変更すればOKなんてところもありますが、それだけだと痛い目見るので気を付けてくださいね。

確かに、上記の’administrator’を’moderate_comments’や’edit_pages’なんかに変更すれば、編集者権限のユーザーのメニューにbiz calendarの設定画面が表示されますが、それだけだと少し足りないんです。
「変更を反映する」ボタンを押したときに、「あれれ?」とか言われますよ。

もう少し突っ込んだサイトだと、いろいろプラグインを組み合わせて権限周りの設定をするように書いてありますが、せっかくなのでwordpressのフィルターを使って鮮やかに解決しましょう。

使用しているテーマのfunctions.phpに次のフィルターを追加してあげるだけ。

function my_bizcalendar_options() {
	return 'edit_pages';
}
add_filter( 'option_page_capability_bizcalendar_options', 'my_bizcalendar_options' );

たぶんこれが一番簡単だと思います。

これを追加することによって、biz calendarの設定権限だけを’edit_pages’(編集者以上)にできるので、その他のオプション権限は渡さなくて済みます。

これと、先に記載したbiz-calendar.phpの

public function on_admin_menu() {
	$page = add_options_page("Biz Calendar設定", "Biz Calendar設定", 'administrator', __FILE__, array(&$this, 'show_admin_page'));
}

このソースコードのadministratorをedit_postsに変更してあげれば編集者権限のユーザーもカレンダーの設定ができるようになります。

public function on_admin_menu() {
	$page = add_options_page("Biz Calendar設定", "Biz Calendar設定", 'edit_pages', __FILE__, array(&$this, 'show_admin_page'));
}

こんな感じ。

仕組みに興味がある人は、wp-admin内のoptions.phpを見てみるといい感じに納得できます。

これで、わざわざ権限設定用のプラグインを追加でインストールしたり、「カレンダーの設定ボタン押したら変な画面になったんだけど!!」などと言われたりしなくて済みます。

もちろん、ちゃんとテストはしっかりしてくださいね!