WordPress カスタム投稿タイプ専用のユーザー作成

Filed under: wordpress — kdcs @ 21年1月16日 土曜日

投稿日: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);

サイト内検索

カテゴリー

最近の投稿

« |WordPress カスタム投稿タイプ専用のユーザー作成| »
↑上に戻る