WordPressで特定のユーザーに記事の編集は許可するが、新規追加の権限を与えたくないときがたまにあります。
今回は、その権限設定の方法を説明します。
User Role Editorプラグイン単体では記事の新規追加の権限を無効化できません
いきなりですが、細かな権限設定ができるUser Role Editorを使用しても、このプラグイン単体では記事の新規追加の権限を無効化することはできません。
なぜなら、WordPressのデフォルト権限では、新規追加と編集の権限が同一の権限として扱われているからです。
ですので、User Role Editorプラグインの設定でcreate_postsにチェックを入れていなかったとしても、edit_postsにチェックが入っていれば、「新規追加」が出てきてしまいます。
権限の詳細がどうなっているか知りたい方は、以下のコードをfunctions.phpに挿入してデバッグしてみてください。([cap]オブジェクトの中)
1 | var_dump( get_post_type_object( 'post' ) ); |
create_postsの権限を変更し、新規追加と編集の権限を分ける方法
新規追加と編集の権限を分けるには、create_postsの権限を変更し、edit_postsとは別の権限を与える必要があります。
以下のコードは、投稿の新規追加を無効化するという想定のコードです。
あらかじめUser Role Editorプラグインでuserという権限グループを作っていたとします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | function change_post_types_cap() { global $wp_post_types; $target_post_types = array( 'post' ); foreach($target_post_types as $target_post_type) { // create_postsの権限を変更 $cap = &$wp_post_types[$target_post_type]->cap; $cap->create_posts = "create_posts"; } // create_posts権限を無効化 $role = get_role( 'user' ); $role->add_cap( 'create_posts', false ); } add_action( 'init', 'change_post_types_cap' ); |
5行目の$target_post_typesに、固定ページやカスタム投稿タイプを入れることもできます。
12行目で、edit_postsに代わってcreate_postsという権限を新たに設定しています。
16行目の’user’は、新規追加を無効化したい権限グループを入れる。