Hạn chế loại bài đăng tùy chỉnh chỉ vai trò quản trị viên trang web


17

Làm cách nào tôi có thể xóa loại bài đăng tùy chỉnh này khỏi hiển thị trong bảng điều khiển cho người dùng không phải là quản trị viên?

/* 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'); 
}

Câu trả lời:


13

register_post_type()chấp nhận một tham số capabilitiestrong các đối số của nó. Xem get_post_type_capabilities()các giá trị có thể. Từ các ý kiến:

Theo mặc định, bảy khóa được chấp nhận như là một phần của mảng khả năng:

  • edit_post, read_postdelete_postlà các khả năng meta, thường được ánh xạ tới các khả năng nguyên thủy tương ứng tùy thuộc vào ngữ cảnh, đó sẽ là bài đăng được chỉnh sửa / đọc / xóa và người dùng hoặc vai trò được kiểm tra. Do đó, các khả năng này thường không được cấp trực tiếp cho người dùng hoặc vai trò.

  • edit_posts - Kiểm soát xem các đối tượng của loại bài đăng này có thể được chỉnh sửa.

  • edit_others_posts- Kiểm soát xem các đối tượng thuộc loại này thuộc sở hữu của người dùng khác có thể được chỉnh sửa hay không. Nếu loại bài đăng không hỗ trợ một tác giả, thì điều này sẽ hành xử như thế nào edit_posts.
  • publish_posts - Kiểm soát các đối tượng xuất bản của loại bài này.
  • read_private_posts - Kiểm soát xem các đối tượng riêng tư có thể được đọc.

Bốn khả năng nguyên thủy này được kiểm tra trong lõi ở nhiều địa điểm khác nhau. Ngoài ra còn có bảy khả năng nguyên thủy khác không được tham chiếu trực tiếp trong lõi, ngoại trừ map_meta_cap(), trong đó có ba khả năng meta đã nói ở trên và chuyển chúng thành một hoặc nhiều khả năng nguyên thủy mà sau đó phải được kiểm tra đối với người dùng hoặc vai trò, tùy thuộc vào ngữ cảnh.

  • read - Kiểm soát xem các đối tượng của loại bài này có thể được đọc.
  • delete_posts - Kiểm soát xem các đối tượng của loại bài đăng này có thể bị xóa.
  • delete_private_posts - Kiểm soát xem các đối tượng riêng tư có thể bị xóa.
  • delete_published_posts - Kiểm soát xem các đối tượng được công bố có thể bị xóa.
  • delete_others_posts- Kiểm soát xem các đối tượng thuộc sở hữu của người dùng khác có thể bị xóa hay không. Nếu loại bài đăng không hỗ trợ một tác giả, thì điều này sẽ hành xử như thế nào delete_posts.
  • edit_private_posts - Kiểm soát xem các đối tượng riêng tư có thể được chỉnh sửa.
  • edit_published_posts - Kiểm soát xem các đối tượng được công bố có thể được chỉnh sửa.

Những khả năng bổ sung này chỉ được sử dụng trong map_meta_cap(). Do đó, chúng chỉ được gán theo mặc định nếu loại bài đăng được đăng ký với 'map_meta_cap'đối số được đặt thành true(mặc định là false).

Trong đối số đăng ký của bạn thêm:

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

Làm thế nào bạn sẽ làm điều tương tự nhưng cho phép quản trị viên và biên tập viên truy cập vào cpt?
urok93

@drtanz Cung cấp cả khả năng tùy chỉnh và bộ lọc user_has_cap. Xem câu trả lời này cho một ví dụ.
fuxia

Tôi có thể làm điều đó giống như cách bạn đề xuất không, nhưng đặt khả năng Manage_links (được chia sẻ giữa quản trị viên và người chỉnh sửa) thay vì update_core?
urok93

@drtanz Có, nhưng tôi sẽ sử dụng khả năng tùy chỉnh. Trình quản lý liên kết cuối cùng sẽ bị xóa và bạn không biết điều gì sẽ xảy ra với các khả năng được gán sau đó.
fuxia

2
Lưu ý về update_core; Chỉ quản trị viên của các cài đặt trang web duy nhất có capabilitiy này. Trong Multisite, chỉ có Super Admin mới có khả năng này.
numediaweb
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.