사용자 지정 게시물 유형을 사이트 관리자 역할로만 제한


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_post, read_postdelete_post메타 기능이며, 일반적으로 컨텍스트에 따라 해당 프리미티브 기능에 매핑되며, 이는 편집 / 읽기 / 삭제되는 게시물 및 사용자 또는 역할을 확인할 수 있습니다. 따라서 이러한 기능은 일반적으로 사용자 나 역할에 직접 부여되지 않습니다.

  • edit_posts -이 게시물 유형의 개체를 편집 할 수 있는지 여부를 제어합니다.

  • edit_others_posts-다른 사용자가 소유 한이 유형의 개체를 편집 할 수 있는지 여부를 제어합니다. 게시물 유형이 작성자를 지원하지 않으면 다음과 같이 작동합니다 edit_posts.
  • publish_posts -이 게시물 유형의 게시 개체를 제어합니다.
  • read_private_posts -개인 개체를 읽을 수 있는지 여부를 제어합니다.

이 네 가지 기본 기능은 다양한 위치에서 핵심적으로 확인됩니다. 를 제외하고는 코어에서 직접 참조되지 않는 7 개의 다른 기본 기능이 map_meta_cap()있습니다.

  • read -이 게시물 유형의 객체를 읽을 수 있는지 여부를 제어합니다.
  • delete_posts -이 게시물 유형의 객체를 삭제할 수 있는지 여부를 제어합니다.
  • delete_private_posts -개인 개체를 삭제할 수 있는지 여부를 제어합니다.
  • delete_published_posts -게시 된 개체를 삭제할 수 있는지 여부를 제어합니다.
  • delete_others_posts-다른 사용자가 소유 한 개체를 삭제할 수 있는지 여부를 제어합니다. 게시물 유형이 작성자를 지원하지 않으면 다음과 같이 작동합니다 delete_posts.
  • edit_private_posts -개인 개체를 편집 할 수 있는지 여부를 제어합니다.
  • edit_published_posts -게시 된 개체를 편집 할 수 있는지 여부를 제어합니다.

이러한 추가 기능은에서만 사용됩니다 map_meta_cap(). 따라서 게시물 유형이 (default is )로 'map_meta_cap'설정된 인수 로 등록 된 경우에만 기본적으로 지정됩니다 .truefalse

등록 인수에 다음을 추가하십시오.

'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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.