WordPressでカスタム投稿タイプを作ったときに、通常の「投稿」とは別にユーザー権限を設定したいことがあります。
今回は「Blog」というカスタム投稿タイプを作り、プラグインUser Role Editorでカスタム投稿タイプBlog専用のユーザー権限を管理できるようにしました。
カスタム投稿タイプに専用権限を設定
register_post_type() の capability_type に独自の値を指定します。
function create_post_type() {
register_post_type( 'blog_cpt',
array(
'label' => 'ブログ',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt',
'author',
'revisions',
),
'rewrite' => array(
'slug' => 'blog',
'with_front' => false,
),
'exclude_from_search' => false,
'show_in_rest' => true,
'capability_type' => array( 'blog', 'blogs' ),
'map_meta_cap' => true,
),
);
}
add_action( 'init', 'create_post_type', 5 );
ポイントはこの2つです。
'capability_type' => array( 'blog', 'blogs' ),
'map_meta_cap' => true,
これでBlog専用の権限を作ることができます。
例えば、
edit_blogs
edit_others_blogs
publish_blogs
delete_blogs
などの権限をUser Role Editorから設定できます。
これなら、
「このユーザーにはBlogだけ編集してもらう」
といった設定ができます。
カテゴリー・タグにも専用権限を設定
Blogのカテゴリーとタグについても、通常のカテゴリー・タグとは別に権限を設定します。
カテゴリーの場合は、
'capabilities' => array(
'manage_terms' => 'manage_blogs_cat_terms',
'edit_terms' => 'edit_blogs_cat_terms',
'delete_terms' => 'delete_blogs_cat_terms',
'assign_terms' => 'assign_blogs_cat_terms',
),
タグの場合は、
'capabilities' => array(
'manage_terms' => 'manage_blogs_tag_terms',
'edit_terms' => 'edit_blogs_tag_terms',
'delete_terms' => 'delete_blogs_tag_terms',
'assign_terms' => 'assign_blogs_tag_terms',
),
とします。
これで、Blogカテゴリー・Blogタグについても専用の権限になります。
User Role Editorで設定
あとはUser Role Editorで、必要な権限をロールに付与します。
例えばBlog担当者なら、
edit_blogs
publish_blogs
edit_published_blogs
delete_blogs
などを付与します。
カテゴリーやタグも管理してもらう場合は、
manage_blogs_cat_terms
manage_blogs_tag_terms
などを追加します。
まとめ
今回使ったコード
<?php
/**
* Blog カスタム投稿タイプ
*/
function create_post_type() {
register_post_type(
'blog_cpt',
array(
'label' => 'ブログ',
'public' => true,
'has_archive' => true,
'menu_position' => 5,
'supports' => array(
'title',
'editor',
'thumbnail',
'excerpt',
'author',
'revisions',
),
'rewrite' => array(
'slug' => 'blog',
'with_front' => false,
),
'exclude_from_search' => false,
'show_in_rest' => true,
// Blog専用の権限
'capability_type' => array( 'blog', 'blogs' ),
'map_meta_cap' => true,
)
);
}
add_action( 'init', 'create_post_type', 5 );
/**
* Blogカテゴリー
*/
function create_blog_cat_taxonomy() {
register_taxonomy(
'blog_cat',
array( 'blog_cpt' ),
array(
'labels' => array(
'name' => 'ブログカテゴリー',
'singular_name' => 'ブログカテゴリー',
'menu_name' => 'ブログカテゴリー',
'all_items' => 'すべてのブログカテゴリー',
'parent_item' => '親ブログカテゴリー',
'parent_item_colon' => '親ブログカテゴリー:',
),
'hierarchical' => true,
'show_ui' => true,
'show_admin_column' => true,
'rewrite' => array(
'slug' => 'blog-cat',
),
'show_in_rest' => true,
// Blogカテゴリー専用の権限
'capabilities' => array(
'manage_terms' => 'manage_blogs_cat_terms',
'edit_terms' => 'edit_blogs_cat_terms',
'delete_terms' => 'delete_blogs_cat_terms',
'assign_terms' => 'assign_blogs_cat_terms',
),
)
);
}
add_action( 'init', 'create_blog_cat_taxonomy', 6 );
/**
* Blogタグ
*/
function create_blog_tag_taxonomy() {
register_taxonomy(
'blog_tag',
array( 'blog_cpt' ),
array(
'labels' => array(
'name' => 'ブログタグ',
'singular_name' => 'ブログタグ',
'menu_name' => 'ブログタグ',
'all_items' => 'すべてのブログタグ',
'edit_item' => 'ブログタグを編集',
'view_item' => 'ブログタグを表示',
'update_item' => 'ブログタグ名を変更',
'add_new_item' => '新規ブログタグを追加',
'new_item_name' => '新規ブログタグ名',
'search_items' => 'ブログタグを検索',
'popular_items' => 'よく使われているブログタグ',
'separate_items_with_commas' => 'ブログタグをカンマで区切ってください',
'add_or_remove_items' => 'ブログタグの追加または削除',
'choose_from_most_used' => 'よく使われているブログタグから選択',
'not_found' => 'ブログタグが見つかりません',
),
'hierarchical' => false,
'show_ui' => true,
'show_admin_column' => true,
'rewrite' => array(
'slug' => 'blog-tag',
),
'show_in_rest' => true,
// Blogタグ専用の権限
'capabilities' => array(
'manage_terms' => 'manage_blogs_tag_terms',
'edit_terms' => 'edit_blogs_tag_terms',
'delete_terms' => 'delete_blogs_tag_terms',
'assign_terms' => 'assign_blogs_tag_terms',
),
)
);
}
add_action( 'init', 'create_blog_tag_taxonomy', 6 );
User Role Editorで設定する主な権限
CPT側では、以下のようなBlog専用capabilityが使えるようになります。
edit_blog
read_blog
delete_blog
edit_blogs
edit_others_blogs
publish_blogs
read_private_blogs
delete_blogs
delete_private_blogs
delete_published_blogs
delete_others_blogs
edit_private_blogs
edit_published_blogs
カテゴリーは、
manage_blogs_cat_terms
edit_blogs_cat_terms
delete_blogs_cat_terms
assign_blogs_cat_terms
タグは、
manage_blogs_tag_terms
edit_blogs_tag_terms
delete_blogs_tag_terms
assign_blogs_tag_terms
です。
blog_cpt だけでなく、blog_cat と blog_tag まで専用権限にしているので、User Role Editorで「Blog担当者」をかなり細かく制御でき、複数人でWordPressを運用する場合には、けっこう便利な方法です。