サイトアイコン Gatespace's Blog

カスタム投稿タイプと専用のユーザー権限(プラグイン編)

この記事をシェアする

複数ユーザーでWordPressを運用する場合、ユーザーによって利用できるダッシュボードの機能を制限したいことがあります。
もちろん、WordPress標準の権限グループ(管理者、編集者、投稿者、寄稿者、購読者)で、事足りる場合もありますが、オリジナルのユーザー権限とカスタム投稿タイプ(+カスタムタクソノミー)を組み合わせることで、運用しやすいダッシュボードを作ることが可能です。
まずはプラグインのみで簡単に実現する方法を試しました。

※なお、今回はマルチサイトでの検証を行っていませんので、ご了承ください。

WordPressの権限グループ

まずは、基本となるWordPressの権限グループを確認しておきます。

上から下へと順にできる事が少なくなってきます。
例えば、制作会社は管理者権限を持ち、普段投稿をするクライアントの担当者には編集者権限を付与する、といったことが可能です。

詳しくはCodexをご覧ください。

カスタム投稿タイプと連動する

目標は

です。

プラグインで実現してみる

簡単に実現するのであれば、プラグインを組み合わせることで「見た目上」は希望通りになります。

1. プラグイン「Custom Post Type UI」でカスタム投稿タイプ「report」とカスタムタクソノミー「reportcat」を作る。

相互に紐付けすることを忘れずに。
使い方は検索するとたくさん出てきますので割愛します。

2. プラグイン「User Role Editor」でオリジナルの権限「report_user」を作成する。


とりあえず「投稿者」を複製して作成すればよいでしょう。その他の、使い方は検索するとたくさん出てきますので割愛します。

3. プラグイン「Adminimize」を使い、不必要なメニューを表示しないようにする。


設定画面を開き、表示させたくないメニュー(投稿など)にチェックを入れていきます。

使い方は検索するとたくさん出てきますので割愛します。
同様のことができるプラグインでもかまわないでしょう。

4. 管理バー(Admin Bar)の「新規投稿」「コメント」などを表示しないようにする。

管理バーの中身までは「Adminimize」で制御できませんので、functions.phpにコードを書いていきます。

if ( is_user_logged_in() && current_user_can('report_user')) {
	function mytheme_remove_item( $wp_admin_bar ) {
		$wp_admin_bar->remove_node('comments'); // 管理バーのコメント
		$wp_admin_bar->remove_node('new-content'); // 管理バーの+新規
	}
	add_action( 'admin_bar_menu', 'mytheme_remove_item', 1000 );
}

とりあえず、これで希望通りの動作になります。

しかし、問題もあります。
このやり方は、あくまで「不要なメニューをダッシュボードと管理バーに出さない」だけで、
権限そのものを制限している訳ではありません。
つまり、URLを直接入力すると、投稿など非表示にしたはずの編集ページにアクセスできますし、投稿したりすることも可能です。

メニューには出ないがURLを入力するとアクセスしてしまう

根本的に権限を制限するにはfunctions.phpにコードを書いていくことになりますが、長くなるので次回に。

この記事をシェアする