カスタムポストタイプに新規ロール(権限)を追加
wordpress カスタムポスト カスタムタクソノミー ロール 権限
カスタムポスト、カスタムタクソノミー登録
◆ 条件
カスタムポスト:blog
カスタムタクソノミー:blog_category
register_post_type('blog',
array(
'label' => 'ブログ',
'menu_position' => 10,
'capability_type' => 'blog',
'map_meta_cap' => true,
'public' => true,
'has_archive' => true
)
);
register_taxonomy(
'blog_category',
'blog',
array(
'label' => 'カテゴリー',
'labels' => array(
'all_items' => 'カテゴリー一覧',
'add_new_item' => 'カテゴリーを追加'
),
'hierarchical' => true,
//新規追加ロールがカスタムタクソノミーを編集できるようにする。
//「edit_ + カスタムポストスラッグ + s」
'capabilities' => array(
'assign_terms' => 'edit_blogs',
),
'rewrite' => array (
'slug' => '/blog/category',
'with_front' => false
),
)
);
ロール(権限)追加
◆ 条件
追加ロール:blog_member
function add_custom_role() {
$role_caps = array ();
//カスタムポストの権限取得
$cap_object = get_post_type_object('blog')->cap;
$caps = get_object_vars($cap_object);
//カスタムポストの権限追加
foreach( $caps as $key => $value ) {
$role_caps[$value] = true;
}
//メディア操作権限追加
$role_caps['upload_files'] = ture;
//タクソノミー(カテゴリー)操作権限追加
$role_caps['manage_categories'] = ture;
//ロールクリア
remove_role('blog_member');
//ロール追加
add_role(
'blog_member',
'ブログメンバー',
$role_caps
);
}
add_action('admin_init', 'add_custom_role');
管理者にもロールの権限を追加
function add_administrator_caps(){
//管理者ロール取得
$role = get_role( 'administrator' );
//カスタムポストの権限取得
$cap_objects = array ();
$cap_objects[] = get_post_type_object('blog')->cap;
$post_type_caps = array ();
foreach( $cap_objects as $cap_object ) {
$caps = get_object_vars($cap_object);
foreach( $caps as $key => $value ) {
$post_type_caps[] = $value;
}
}
//管理者にカスタムポストの権限追加
foreach($post_type_caps as $cap) {
$role->add_cap( $cap );
}
}
add_action( 'admin_init', 'add_administrator_caps' );