投稿日:2020.7.27 更新日:2021.1.16(権限グループ名と権限名について追記・応用編修正)
カスタム投稿タイプの記事のみ扱えるユーザーを作る。
※プラグイン「User Role Editor」を使うことが前提条件
1. User Role Editorで権限グループを追加する
2. 権限を追加する(この権限名とfunction.phpに記述する権限名を合わせる)
function.phpにカスタム投稿タイプ用の権限を用意する
「authid」というidの権限グループと「ptauth」というカスタム投稿タイプ用の各権限を新たに追加し、管理者(administrator)にも追加するというもの。
function my_custom_post_type() {
register_post_type(
'ptname',
array(
'label' => 'カスタム投稿タイプのスラッグ名',
'public' => true,
'capability_type' => 'ptauth',
'has_archive' => true,
'menu_position' => 5,
'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'custom-fields' ,'comments' )
)
);
$rm = new WP_Roles();
$rm->add_role('authid', '権限名' );
foreach( array( 'authid', 'administrator' ) as $rid ) {
$role = $rm->get_role($rid);
$role->add_cap('read');
$role->add_cap('add_ptauth');
$role->add_cap('add_ptauths');
$role->add_cap('edit_ptauth');
$role->add_cap('edit_ptauths');
$role->add_cap('delete_ptauth');
$role->add_cap('delete_ptauths');
$role->add_cap('publish_ptauths');
}
$role->add_cap('delete_others_ptauths');
$role->add_cap('edit_others_ptauths');
}
add_action( 'init', 'my_custom_post_type', 0 );
add_roleについてWordPress Codexの関数リファレンスより。
「wordPressに新しい権限グループを追加します」
<?php add_role( $role, $display_name, $capabilities ); ?>
$role = 権限グループ名 $display_name = 権限グループ表示名 $capabilities = 権限の配列
上記のコードでは「authid」が権限グループ名ということになり、「権限名」は権限グループ表示名になる
応用編に続く
応用編
カスタム投稿タイプで「ブログ」を作成し、このブログを作成・編集・削除できるユーザーを作る
・カスタム投稿タイプの権限「post」を「blog」に変更
・「blogger」というidの権限グループ名で「ブログ編集者」という権限グループ表示名にする
※カスタムフィールドを使わない場合、supportsの「’custom-fields’,」を削除する
//カスタム投稿タイプ「ブログ」を作成する--##############################################--
function add_staffblog_post_type() {
$params = array(
'labels' => array(
'name' => 'ブログ',
'singular_name' => 'ブログ',
'add_new' => '新規追加',
'add_new_item' => 'ブログを新規追加',
'edit_item' => 'ブログを編集する',
'new_item' => '新規ブログ',
'all_items' => 'ブログ一覧',
'view_item' => 'ブログを見る',
'search_items' => '検索する',
'not_found' => 'ブログが見つかりませんでした。',
'not_found_in_trash' => 'ゴミ箱内にブログが見つかりませんでした。'
),
'public' => true,
'capability_type' => 'blog',
'has_archive' => true,
'supports' => array(
'title',
'editor',
'author',
'custom-fields',
),
'taxonomies' => array('staffblog_category','staffblog_tag')
);
register_post_type('staffblog', $params);
}
$rm = new WP_Roles();
$rm->add_role('blogger', 'ブログ編集者' );
foreach( array( 'blogger', 'administrator' ) as $rid ) {
$role = $rm->get_role($rid);
$role->add_cap('read');
$role->add_cap('add_blog');
$role->add_cap('add_blogs');
$role->add_cap('edit_blog');
$role->add_cap('edit_blogs');
$role->add_cap('delete_blog');
$role->add_cap('delete_blogs');
$role->add_cap('publish_blogs');
}
add_action('init', 'add_staffblog_post_type');
※capability_type(閲覧/編集/削除の権限を構築する文字列)で任意の引数をセット
bloggerという権限を用意し、実行できる項目をセットする
この時、_blog(単数形) と _blogs(複数形)を作る
※単数形と複数形があるのは本家(英語バージョン)で必要だかららしい・・・
カスタム投稿タイプでタクソノミー(カテゴリー)を扱う場合
//カスタム投稿タイプ「ブログ」用のカテゴリを作成する--------------------------------------
function create_staffblog_taxonomies() {
// カテゴリを作成
$labels = array(
'name' => 'ブログカテゴリ', //複数系のときのカテゴリ名
'singular_name' => 'ブログカテゴリ', //単数系のときのカテゴリ名
'search_items' => 'ブログカテゴリを検索',
'all_items' => '全てのブログカテゴリ',
'parent_item' => '親カテゴリ',
'parent_item_colon' => '親カテゴリ:',
'edit_item' => 'ブログカテゴリを編集',
'update_item' => 'ブログカテゴリを更新',
'add_new_item' => '新規ブログカテゴリを追加',
'new_item_name' => '新規ブログカテゴリ',
'menu_name' => 'ブログカテゴリ' //ダッシュボードのサイドバーメニュー名
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'rewrite' => array( 'slug' => 'staffblog_cat' ),
'capabilities' => array( 'assign_terms' => 'edit_blogs','edit_terms' => 'publish_blogs' )
);
register_taxonomy( 'staffblog_category', 'staffblog', $args );
}
add_action('init', 'create_staffblog_taxonomies');
※capabilitiesで権限を指定する
User Role Editorにて権限グループ(blogger ブログ編集者)と権限(blogger)を作成し、
左側メニューのブログをクリック。 必要な権限にチェックを入れる
WordPress本体でユーザーの新規追加を行う
このユーザーはログインするとプロフィールページにリダイレクトされるので、
これをダッシュボードにリダイレクトさせるようfunction.phpに以下を記述する
ユーザーはブログ編集者(blogger)
//カスタム投稿タイプ「ブログ」ブログ編集者のログインリダイレクト--------------------------
function my_login_redirect( $redirect_to, $request, $user ) {
if( !empty( $user->roles ) ) {
if( in_array( "blogger", $user->roles ) ) {
return home_url("/wp-admin/index.php");
} else {
return home_url("/wp-admin/");
}
}
}
add_filter("login_redirect", "my_login_redirect", 10, 3);