background-image

Custom Post Type UIで追加したカスタム投稿の編集権限をUser role editorで制御する方法

Custom Post Type UIで追加したカスタム投稿の編集権限をUser role editorで制御する方法

WordPressを複数のユーザーで運営していく場合に、管理者としての権限は与えたくないけど、投稿のみ追加・編集させる権限を与えたい、という要望はよくあるかと思います。
それだけならば、ユーザーに「投稿者」の権限を付与するだけなので簡単です。

しかしながら、投稿全体ではなく、「お知らせ」のみ、「ブログ」のみなど一部のカスタム投稿のみを編集できるユーザーを用意したい、となった場合には一工夫必要になります。

今回は、「User role editor」というプラグインを使用して、実現していきます。

また、カスタム投稿に紐づけているカスタムタクソノミーがある場合、プラグインの設定だけでは投稿画面から設定できないようになってしまっているので、追加でfunctions.phpに追記する必要があるため、その方法もご紹介します。

User role editorのインストール

まずはWordPressのサイドバーの「プラグイン」⇒「新規プラグインを追加」から検索バーに「User role editor」と入力します。(なぜか1ページ目に出てこず2ページ目に出てきたりします…)

User Role Editorのインストール

見つけられたらインストールし、有効化しましょう。

User role editorの設定

例えば、今回は「求人募集」というカスタム投稿のみを編集するユーザーを作成したい、というニーズを想定に進めていきます。

まずは管理画面サイドバーの「ユーザー」⇒「USer Role Editor」から「権限グループの追加」を行います。

権限グループの追加

この権限グループは下記の様に、ユーザーに対してどの編集権限を与えるか選択する際に使用されることになります。

ユーザー編集画面の権限グループ切り替え

Custom Post Type UIの設定

次に「Custom Post Type UI」プラグインにおいてカスタム投稿の追加を行っていきますが、インストール方法や細かい設定については割愛させて頂きます。

とりあえず下記の様に、新規に「求人募集」のカスタム投稿を追加していきます。

カスタム投稿の追加

ここで、1つ重要なポイントとなるのが、「権限タイプ」の設定です。
デフォルトではここは「post」となっていますが、この名称を「recruiting」などの固有の名称に変更してください。

変更前のUser Role Editor設定画面を見ると分かりますが、カスタム投稿タイプの階層中にある「求人募集」の権限名を見てみると下記の様に末尾がpostsになっていることが分かると思います。

権限タイプがpostの場合の編集権限一覧画面

WordPressのデフォルトの投稿も同じように、postsとなっているため「投稿」と「カスタム投稿」で同じ編集権限が与えられてしまっている状態な訳です。
そのため権限タイプを「post」から「recruiting」に変更してあげることで、下記の様にカスタム投稿独自の権限に変更されるという訳です。

権限タイプを変更した場合の編集権限一覧画面

権限グループの設定

あとは、User Role Editorで先ほど作成した権限グループに求人募集の編集権限を付与し「更新」を押してあげるだけでOKです。

権限グループに対しての権限を設定する画面

そして、ユーザーの新規作成(あるいは既存ユーザーの権限変更)時に権限グループを、上記で設定した「求人募集編集ユーザー」に変更し完了となります。

ユーザーの権限グループ変更画面

試しに、そのユーザーでログインを行いサイドバーにカスタム投稿が表示されていればとりあえずは設定完了となります。

(上記の画面ではついでにContact Form 7の編集権限も与えているため「お問い合わせ」も表示されてしまっています。)

ユーザーがカスタムタクソノミーを設定できるようにするための設定

しかしながら、上記の設定だけでは、まだカスタムタクソノミをユーザーが設定できる状態にはなっていません。

例えば、「求人募集」というカスタム投稿に対して、「地域」と「職種」という2つのカスタムタクソノミーを設定できるように紐づけしていたとします

その場合、これまでの設定だけでは編集時に下記の様に選択部分がグレーアウトし、選択できない状態になってしまっています。

カスタムタクソノミーがグレーアウトしている状態

そのため、functions.phpに下記のような記載を施します。

function assign_taxonomyname(){
  global $wp_taxonomies;
    // タクソノミー1の権限を変更
  if (isset($wp_taxonomies['area'])) {
    $wp_taxonomies['area']->cap->assign_terms = 'edit_recruitings';
    $wp_taxonomies['area']->cap->manage_terms = 'edit_recruitings';
    $wp_taxonomies['area']->cap->edit_terms = 'edit_recruitings';
    $wp_taxonomies['area']->cap->delet_terms = 'edit_recruitings';
  }
    // タクソノミー2の権限を変更
  if (isset($wp_taxonomies['job'])) {
    $wp_taxonomies['job']->cap->assign_terms = 'edit_recruitings';
    $wp_taxonomies['job']->cap->manage_terms = 'edit_recruitings';
    $wp_taxonomies['job']->cap->edit_terms = 'edit_recruitings';
    $wp_taxonomies['job']->cap->delete_terms = 'edit_recruitings';
  }
}
add_action('init', 'assign_taxonomyname');

isset($wp_taxonomies[”]の中身はご自身の設定したタクソノミーのスラッグ名に変更してください。
‘edit_recruitings’というのは先ほど設定した権限グループ名のIDになります。

特に複雑なことはしておらず、タクソノミーの各編集権限に’edit_recruitings’を設定しているだけです。

ちなみに各種編集権限は下記の様になっていますので、ご自身の必要に応じて割り当ててみてください。

assign_terms 編集画面でのタームの割り当て
manage_terms 管理画面のメニューに表示
edit_terms タームの編集
delet_terms タームの削除

上記の設定でカスタム投稿編集時にカスタムタクソノミーの選択ができるようになりました。

©UCHIWA Creative Studio.all rights reserved.