複数ユーザーでWordPressを運用する場合、ユーザーによって利用できるダッシュボードの機能を制限したいことがあります。
もちろん、WordPress標準の権限グループ(管理者、編集者、投稿者、寄稿者、購読者)で、事足りる場合もありますが、オリジナルのユーザー権限とカスタム投稿タイプ(+カスタムタクソノミー)を組み合わせることで、運用しやすいダッシュボードを作ることが可能です。
まずはプラグインのみで簡単に実現する方法を試しました。
※なお、今回はマルチサイトでの検証を行っていませんので、ご了承ください。
目次
WordPressの権限グループ
まずは、基本となるWordPressの権限グループを確認しておきます。
- 特権管理者 – マルチサイトにおいてネットワーク全体を管理することができます。
- 管理者 – すべての管理機能を使えます。
- 編集者 – (他人の投稿を含む)すべての投稿・固定ページ、カテゴリー・タグ、リンク、コメントの管理ができます。ただし、外観やプラグイン、設定は管理できません。
- 投稿者 – 自分の投稿を公開し管理することができますが、固定ページ、コメントの管理はできません。
- 寄稿者 – 投稿はできますが、公開したり、他人の投稿を編集したりはできません。
- 購読者 – 自分のプロフィールのみ管理できます。
上から下へと順にできる事が少なくなってきます。
例えば、制作会社は管理者権限を持ち、普段投稿をするクライアントの担当者には編集者権限を付与する、といったことが可能です。
詳しくはCodexをご覧ください。
- 日本語Codex:ユーザーの種類と権限
- 本家Codex:Roles and Capabilities
カスタム投稿タイプと連動する
目標は
- カスタム投稿タイプ「report」を作成。カスタムタクソノミー「reportcat」を紐付け(投稿におけるカテゴリーの扱い)
- 「report」にだけ投稿できる権限「report_user」を作る。ただし公開権限は無し。
- なお、その権限を持つ人は複数おり、他人の投稿を編集できないようにする。
です。
プラグインで実現してみる
簡単に実現するのであれば、プラグインを組み合わせることで「見た目上」は希望通りになります。
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を直接入力すると、投稿など非表示にしたはずの編集ページにアクセスできますし、投稿したりすることも可能です。
根本的に権限を制限するにはfunctions.phpにコードを書いていくことになりますが、長くなるので次回に。