- 特権管理者
- マルチサイト運用する方に必要な権限グループ。単体のWordPressでは考慮不要です
- 管理者
- すべての管理機能にアクセスできる権限グループ。ユーザー管理、プラグイン管理、サイト設定ができます
- 編集者
- 他人の記事を編集・公開できます
- 投稿者
- 自身の記事を編集・公開できます
- 寄稿者
- 自身の記事を編集できるが公開はできない
- 購読者
- プロファイル管理のみを実行できるユーザー
これら以外の独自の権限グループは add_role()
関数や remove_role()
関数を使って作成または削除ができます。
付与可能な権限の種類
全部で73個もの権限があります。あまりにも数が多いので、この記事ではお仕事でカスタマイズ要望の多いユーザーとプラグインに関する権限を、例を交えてみていきたいと思います。
全リストはドキュメント(権限・権限グループテーブル)をご覧ください。
ユーザー管理に関する権限
例:編集者にユーザー管理権限を付与したい
デフォルトの編集者にはユーザー管理権限がありません。管理者以上のユーザーのみがユーザーの追加・削除・変更・編集を行えます。編集者もユーザー管理をしたい場合、ユーザーに関する権限を編集者に付与すれば良いです。
ユーザーに関する権限は6つあります。
- list_users
- ユーザーアカウントの一覧を表示できるかどうか
- create_users
- delete_users
- promote_users
- 権限の変更ができるかどうか。投稿者を編集者に変えるなどです
- edit_users
- 他人のプロフィール内容を編集できる権限
- remove_users
- deleteとの違いとして、こちらはマルチサイト用の削除
プラグインに関する権限
例:編集者にプラグイン権限を付与したい
デフォルトの編集者にはプラグインに関する権限がありません。管理者以上のユーザーのみがプラグインの追加・有効化・更新・削除・編集を行えます。編集者もプラグイン管理をしたい場合、プラグインに関する権限を編集者に付与すれば良いです。
- install_plugins
- プラグインのインストールができるようになります。この権限を単体で付与した場合にダッシュボード>更新がアクセスできるようになることを確認しました。update権限ではないので変な感じがします……
- activate_plugins
- update_plugins
- delete_plugins
- edit_plugins
- これはプラグインエディターという画面を指しています。プラグインのコードを管理画面から編集できる画面です
- resume_plugins
- これはよくわかりませんでした
手動で付与する
さて、権限の種類を見てきたところで、実際に権限を付与してみましょう。 functions.php
に以下のコードを書くとお試しができます。画面をリロードするとデータベースに書き込まれます。
// 編集者(editor)にユーザー関連の管理権限を付与
add_action('admin_init', function() {
$role = get_role( 'editor' );
$role->add_cap( 'list_users' );
$role->add_cap( 'create_users' );
$role->add_cap( 'delete_users' );
$role->add_cap( 'promote_users' );
$role->add_cap( 'edit_users' );
$role->add_cap( 'remove_users' );
});
一度書き込まれたらコードを消しても元には戻りませんので、元に戻したいときは remove_cap()
を書いてから画面を読み込んでください。
$role->remove_cap( 'list_users' );
こうして権限は付与できるものの、冒頭でも少し触れたように、残念ながらこれだけではナイーブすぎる挙動となるため使い勝手が悪いです。
例えばこのようなことが起こります:
- 編集者にユーザー削除権限を与えると、より上位の権限のユーザーである管理者を削除できてしまう
より上位の権限のユーザーへの操作はできないようになっていてほしいところですが、できてしまうようでした。できればプラグインを使用せずにこれを解決したいところですが、権限によって表示・非表示する処理は複雑になるので、よほどのことがない限りは素直にプラグインに頼るのが良いと思いました。