カスタム投稿タイプをサイト管理者ロールのみに制限する


17

管理者以外のユーザーのダッシュボードにこのカスタムの投稿タイプが表示されないようにするにはどうすればよいですか?

/* Add Websites Custom Post Type */
add_action( 'init', 'create_website_type' );
function create_website_type() {

    register_post_type( 'website',
        array(
            'labels' => array(
                'name' => __( 'Websites' ),
                'singular_name' => __( 'Website' ),
                'add_new' => __( 'Add New Website' ),
                'add_new_item' => __( 'Add New Website' ),
                'edit' => __( 'Edit Website' ),             
                'edit_item' => __( 'Edit Website' ),                
                'new_item' => __( 'Add New Website' ),              
                'view' => __( 'View Website' ),         
                'view_item' => __( 'View Website' ),                    
                'search_items' => __( 'Search Websites' ),  
                'not_found' => __( 'No Websites Found' ),
                'not_found_in_trash' => __( 'No Websites found in Trash' ),                                         
            ),
            'description' => __('Websites to be shown in Resources section.'),
            'public' => true,
            'show_ui' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'menu_position' => 20,
            'supports' => array('title', 'editor'),
            'can_export' => true        
        )
    ); 
    remove_post_type_support('website','editor'); 
}

回答:


13

register_post_type()capabilities引数でパラメーターを受け入れます。get_post_type_capabilities()可能な値を参照してください。コメントから:

デフォルトでは、機能配列の一部として7つのキーが受け入れられます。

  • edit_postread_postおよびdelete_postポストが編集されるであろう次いで一般文脈に応じてプリミティブの機能を対応するマッピングされたメタ機能は、読み出し/ /削除、ユーザまたはロールビーイングがチェックされます。したがって、これらの機能は通常、ユーザーまたはロールに直接付与されません。

  • edit_posts -この投稿タイプのオブジェクトを編集できるかどうかを制御します。

  • edit_others_posts-他のユーザーが所有するこのタイプのオブジェクトを編集できるかどうかを制御します。投稿タイプが作成者をサポートしていない場合、これはのように動作しますedit_posts
  • publish_posts -この投稿タイプの公開オブジェクトを制御します。
  • read_private_posts -プライベートオブジェクトを読み取ることができるかどうかを制御します。

これらの4つの基本機能は、さまざまな場所のコアでチェックされます。また、コアでは直接参照されない7つのプリミティブ機能があります。ただし、map_meta_cap()上記の3つのメタ機能を取得し、コンテキストに応じてユーザーまたはロールに対してチェックする必要がある1つ以上のプリミティブ機能に変換します。

  • read -この投稿タイプのオブジェクトを読み取ることができるかどうかを制御します。
  • delete_posts -この投稿タイプのオブジェクトを削除できるかどうかを制御します。
  • delete_private_posts -プライベートオブジェクトを削除できるかどうかを制御します。
  • delete_published_posts -公開されたオブジェクトを削除できるかどうかを制御します。
  • delete_others_posts-他のユーザーが所有するオブジェクトを削除できるかどうかを制御します。投稿タイプが作成者をサポートしていない場合、これはのように動作しますdelete_posts
  • edit_private_posts -プライベートオブジェクトを編集できるかどうかを制御します。
  • edit_published_posts -公開されたオブジェクトを編集できるかどうかを制御します。

これらの追加機能はでのみ使用されmap_meta_cap()ます。したがって、投稿タイプが'map_meta_cap'設定された引数で登録されている場合にのみデフォルトで割り当てられますtrue(デフォルトはfalse)。

登録引数に次を追加します。

'capabilities' => array(
    'edit_post'          => 'update_core',
    'read_post'          => 'update_core',
    'delete_post'        => 'update_core',
    'edit_posts'         => 'update_core',
    'edit_others_posts'  => 'update_core',
    'delete_posts'       => 'update_core',
    'publish_posts'      => 'update_core',
    'read_private_posts' => 'update_core'
),

管理者と編集者がcptにアクセスできるようにしながら、同じことをどのように行いますか?
urok93

@drtanzカスタム機能とfilterの両方を提供しますuser_has_cap。例については、この回答を参照してください。
FUXIA

あなたが提案したのと同じようにできますが、update_coreの代わりにmanage_links機能(管理者と編集者の間で共有される)を入れますか?
urok93

@drtanzはい、ただしカスタム機能を使用します。リンクマネージャは最終的に削除され、割り当てられた機能がどうなるかはわかりません。
fuxia

2
update_coreに関する注意。単一サイトのインストールの管理者のみがこの機能を備えています。マルチサイトでは、スーパー管理者のみがこの機能を備えています。
numediaweb 14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.