こんにちは。
register_taxonomy の capabilities 引数ですが、どの権限を割り当てるか(作るか)であって「権限グループ」を割り当てる訳ではありません。
http://codex.wordpress.org/Function_Reference/register_taxonomy
それぞれデフォルトで
タクソノミーの管理画面 manage_terms : manage_categories
タームの編集 edit_terms : manage_categories
タームの削除 delete_terms : manage_categories
投稿画面で選択できる assign_terms : edit_posts
で権限が割り当てられます。
manage_categories は編集者以上、edit_posts は寄稿者以上に付与されている権限です。
taxonomy_c「のみ」投稿者以上の権限で編集できる権限を与えるなら
1. オリジナルの権限の作成
2. 新しい権限を権限グループに付与
の順番になります。
function codex_custom_init() {
/**
* カスタムタクソノミー reportcat
*/
$taxlabels = array(
'name' => "タクソノミーC",
'singular_name' => "タクソノミーC",
'search_items' => "タクソノミーCを検索",
'all_items' => "すべてのターム",
'parent_item' => "親ターム",
'parent_item_colon' => "親:",
'edit_item' => "タームを編集",
'update_item' => "タームを更新",
'add_new_item' => "新規ターム",
'new_item_name' => "新規ターム名",
'menu_name' => "タクソノミーC",
);
register_taxonomy( 'taxonomy_c', array('post_type_a', 'post_type_b'), array(
'hierarchical' => true,
'labels' => $taxlabels,
'show_ui' => true,
'query_var' => true,
'rewrite' => true,
'capabilities' => array(
'manage_terms' => 'manage_taxonomy_c',
'edit_terms' => 'manage_taxonomy_c',
'delete_terms' => 'manage_taxonomy_c',
),
));
/**
* 権限 manage_taxonomy_c を権限グループに付与
*/
// 権限グループをすべて取得
$roles = new WP_Roles();
foreach ($roles->roles as $key => $value ) {
if ( $key == "subscriber" or $key == "contributor") continue; // 購読者・寄稿者はスキップ
$role = get_role($key);
$role->add_cap( "manage_taxonomy_c" ); // 権限 manage_taxonomy_c の付与
}
}
add_action( 'init', 'codex_custom_init', 0);
自分のブログになりますが、カスタム投稿タイプまで踏みいった権限のことを書きましたので、
参考になれば幸いです。
http://wp.me/p14D7l-1S
トピック投稿者
haruka
(@harlequin_wp)
gatespaceさん、回答ありがとうございます!
capabilitiesで指定できるのは権限グループではなく、権限だったのですね。
すっかり間違って認識してました。
CODEXに具体的なコード記述例が無かったので適当にググってヒットしたコードをそのまま鵜呑みにしてしまってました(汗)
英文サイトだったので内容をよく読みもしなかったので、もしかして間違いの例として挙げられていたのかも…。
gatespaceさんの説明と、具体的なコードのおかげで、やっとCODEXに書かれていた、
'manage_terms' - 'manage_categories'
'edit_terms' - 'manage_categories'
'delete_terms' - 'manage_categories'
'assign_terms' - 'edit_posts'
の意味が分かりました。
教えて頂いたコードで、希望通りに動作しました!ありがとうございます!
で、理解したところでよく考えたら、edit_postsは寄稿者以上の権限ということは、投稿者だけでなく寄稿者にもedit_terms権限を与えて良いなら、新しい権限グループを作成する必要が無く、
'capabilities' => array('edit_terms' => 'edit_posts')
だけで良いということですよね?
作成中のWPは管理者と投稿者しかいないので、これでも問題なさそうです。
この記述でも、同じように希望通りに動作しました。
gatespaceさんのブログは、いつも参考にさせていただいております。
紹介の記事にも目を通していたのですが、カスタム投稿タイプの権限のことだけでタクソノミーは関係ないかと思ってスルーしてしまってました(汗)
今回、とても勉強になりました。ありがとうございました!
edit_terms は権限ではないですよ。
「タームの編集」という操作の事を指し、それを行える権限がデフォルトでは「manage_categories」になります。
‘capabilities’ => array(‘edit_terms’ => ‘edit_posts’)
とした場合、寄稿者でもタームの編集はできますが、manage_terms、delete_termsが指定されていないので、タームの削除もできませんが、タクソノミーの管理画面(サブパネル)にアクセスできなくなりますよ。
'capabilities' => array(
'manage_terms' => 'edit_posts',
'edit_terms' => 'edit_posts',
'delete_terms' => 'edit_posts',
)
のようにすべて指定しておくか、
上記の私のコードなら、
if ( $key == "subscriber" or $key == "contributor") continue; // 購読者・寄稿者はスキップ
の部分を
if ( $key == "subscriber" ) continue; // 購読者はスキップ
にしてみてください。
個人的にはどちらの方法でも大丈夫ですが、
デフォルトの権限にあわせて任意の権限(manage_taxonomy_c)を作った方が、
元のコードとの比較もできるし、良いかなぁとは思います。
(無いとは思うけど、コアのアップデートでedit_posts権限が変わってしまう可能性もありますし)
あ、ブログありがとうございます。
トピック投稿者
haruka
(@harlequin_wp)
gatespaceさん、補足いただきありがとうございます!
edit_terms は権限ではないですよ
あ、権限という表現が間違っていました。
edit_posts等の権限とは違うのですよね。
例えば、デフォルトの
'edit_terms' - 'manage_categories'
は、manage_categories権限を持つグループに、edit_terms、タームを追加する権利を与える、ということと思い、権利を与えるというのを権限を与える、と間違って表現してしまいました。
寄稿者でもタームの編集はできますが、manage_terms、delete_termsが指定されていないので、タームの削除もできませんが、タクソノミーの管理画面(サブパネル)にアクセスできなくなりますよ。
はい。今回、投稿者にはデフォルトで可能なタームを割り当てるassign_termsに加えて、投稿画面でのタームの追加edit_terms「のみ」を可能にしたく、それ以上のこと(管理や削除)はさせたくないので、大丈夫です。
でも、
コアのアップデートでedit_posts権限が変わってしまう可能性もありますし
なるほど、それも考えられますよね。
そう考えると、新しく権限グループを作成して設定した方が、確実で安心ですね。