2020.11.24

WordPressでオリジナルの権限を作ってみた

キング

こんにちは!
Webエンジニアのキングこと澁田です!

WordPressではユーザーにいくつかの権限を設定できますが、
その権限で「できること」「できないこと」を細かくカスタマイズしたい時がありました。
そんな時に私が行った手順を紹介したいと思います。

WordPressの権限って何?

WordPressでログインユーザーに与える権限は以下の5つから選ぶことができます。

購読者 閲覧のみ可能です。
この権限では、記事を作成したり、公開したりすることはできません。
寄稿者 記事の下書きと編集のみ可能です。
他のユーザーが作成した記事は編集できません。
投稿者 記事の投稿や編集、公開が可能です。
他のユーザーが作成した記事は編集できません。
編集者 コメントやリンクの管理などコンテンツに関する全ての操作が可能です。
管理者 WordPressの全ての操作が可能です。

プラグイン「User Role Editor」をインストール


User Role Editor
https://wordpress.org/plugins/user-role-editor/

User Role Editorを使えば、WordPressで用意されている5つの権限の内容を変更したり、自分で新しい権限を作ることもできます。

プラグインを有効化にすると管理画面メニューのユーザーの中に「User Role Editor」が追加されて新しい権限名と内容の選択ができるようになります。

1.プラグインを有効にすると「User Role Editor」が追加されます

権限グループの追加

2.カスタム投稿タイプの編集のみ可能な権限グループを新規追加



新規権限グループの追加

今回は「MOVIE」というカスタム投稿タイプの編集のみ可能な権限グループを新規追加してみます。
コピー元にその他の権限グループを設定することで、選択した権限グループの権限情報を保持したまま追加できるので、「エディター(editor)」をコピー元にして権限グループを作成してみます。
ちなみに「エディター(editor)」は先述の「編集者」の権限のことです。

3.作成した「MOVIE編集者(editor_movie)の権限を編集してみます



作成した「MOVIE編集者(editor_movie)の権限を編集

新たに権限グループを作成できたので、作成した「MOVIE編集者(editor_movie)の権限を編集してみたいと思います。

カスタム投稿タイプの権限をみると、”delete_others_posts”、”edit_others_posts”など様々な権限が設定されていますが、それぞれの権限が「カスタム投稿タイプ」を削除したり編集したりできる権限であるため、 “MOVIE”のみを削除したり編集したりできる権限を作成する必要があります。

4.function.phpを編集

// 付与する権限を用意
$capabilities = array(
    // 自分の投稿を編集する権限
    'edit_posts' => 'edit_movies',
    // 他のユーザーの投稿を編集する権限
    'edit_others_posts' => 'edit_others_movies',
    // 投稿を公開する権限
    'publish_posts' => 'publish_movies',
    // プライベート投稿を閲覧する権限
    'read_private_posts' => 'read_private_movies',
    // 自分の投稿を削除する権限
    'delete_posts' => 'delete_movies',
    // プライベート投稿を削除する権限
    'delete_private_posts' => 'delete_private_movies',
    // 公開済み投稿を削除する権限
    'delete_published_posts' => 'delete_published_movies',
    // 他のユーザーの投稿を削除する権限
    'delete_others_posts' => 'delete_others_movies',
    // プライベート投稿を編集する権限
    'edit_private_posts' => 'edit_private_movies',
    // 公開済みの投稿を編集する権限
    'edit_published_posts' => 'edit_published_movies',
);

投稿タイプ作成時に記述したregister_post_type関数に以下を記述します

// カスタム投稿作成時に権限グループとその権限を設定
register_post_type( 'movie', array(
   'capability_type' => 'movie',
   'capabilities'  => $capabilities
) );

併せてカスタム投稿タイプ作成時に記述したregister_post_type関数に以下のように記述します。 capability_typeはカスタム投稿タイプ名、capabilitiesには先ほど定義した$capabilitiesを記述しています。

カスタム投稿タイプ「MOVIE」に固有の権限を設定するためにfunction.phpで以下のように記述します。
元々設定されているカスタム投稿タイプを操作する権限の名称を対象のカスタム投稿において置き換えることができます。
今回は各権限の末尾”posts”を”movies”に設定してみます。

5.「MOVIE」のみ、設定した権限名に変わっていることを確認します

改めてUser Role Editorの画面を見てみるとカスタム投稿タイプ「MOVIE」のみ、設定した権限名に変わっていることがわかります。

6.必要に応じて権限のチェックボックスを変更




あとは必要に応じて、権限のチェックボックスを変更しましょう。



7.「MOVIE」のカスタム投稿の編集を可、カスタム投稿の編集を不可に



権限を変更

今回作成した「MOVIE編集者」の権限グループでは「MOVIE」のカスタム投稿の編集を可にし、他のカスタム投稿の編集を不可にしたいため以下のように変更してみます。

8.MOVIEのみを編集できるようになりました!!



MOVIEのみを編集できるようになりました

「MOVIE編集者」の権限グループが設定されているユーザでログインしてみると、このように他のカスタム投稿(BLOG)がメニューに表示されなくなり、MOVIEのみを編集できるようになりました。

まとめ

今回は、「User Role Editor」のプラグインを用いてWordPressの権限を追加、編集する際の手順の一例を紹介させていただきましたが、他にも様々な方法があるようです。

functions.phpをあまり触りたくない人や全ての権限に対して、細かくカスタマイズしたい場合などではプラグインを利用するのが便利だと思います。
ぜひ参考にしていただければと思います!

  • TWEET!
  • SHARE!