あのときコード

カスタムポストタイプに新規ロール(権限)を追加

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' );

参考サイト