この記事をシェアする

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

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

WordPressの権限グループ

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

  • 特権管理者 – マルチサイトにおいてネットワーク全体を管理することができます。
  • 管理者 – すべての管理機能を使えます。
  • 編集者 – (他人の投稿を含む)すべての投稿・固定ページ、カテゴリー・タグ、リンク、コメントの管理ができます。ただし、外観やプラグイン、設定は管理できません。
  • 投稿者 – 自分の投稿を公開し管理することができますが、固定ページ、コメントの管理はできません。
  • 寄稿者 – 投稿はできますが、公開したり、他人の投稿を編集したりはできません。
  • 購読者 – 自分のプロフィールのみ管理できます。

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

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

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

目標は

  • カスタム投稿タイプ「report」を作成。カスタムタクソノミー「reportcat」を紐付け(投稿におけるカテゴリーの扱い)
  • 「report」にだけ投稿できる権限「report_user」を作る。ただし公開権限は無し。
  • なお、その権限を持つ人は複数おり、他人の投稿を編集できないようにする。

です。

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

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

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

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

カスタム投稿タイプ「report」編集画面

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


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

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

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

スクリーンショット(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にコードを書いていくことになりますが、長くなるので次回に。

この記事をシェアする