Khả năng và các loại bài tùy chỉnh


30

Tôi có một loại bài đăng tùy chỉnh mà tôi muốn hạn chế quyền truy cập vào một số vai trò nhất định, tuy nhiên, tôi đã thêm nội dung bằng loại bài đăng tùy chỉnh và bây giờ tôi phải làm cho chúng bị hạn chế. Khả năng_type là 'bài'

'capability_type' => 'post'

Điều gì cũng tốt khi nội dung hiển thị trong phần phụ trợ, tuy nhiên, ngay sau khi tôi thêm bất kỳ khả năng nào, nội dung sẽ biến mất khỏi phần phụ trợ?

Tôi đã thử tùy chỉnh loại khả năng để bao gồm các định nghĩa số nhiều để tự xây dựng nhưng ngay khi tôi loại bỏ hoặc thay đổi các loại khả năng thì nó đã biến mất!

mã đầy đủ:

add_action( 'init', 'register_cpt_gallery' );

function register_cpt_gallery() {
$labels = array( 
    'name' => _x( 'Galleries', 'gallery' ),
    'singular_name' => _x( 'Gallery', 'gallery' ),
    'add_new' => _x( 'Add New', 'gallery' ),
    'add_new_item' => _x( 'Add New Gallery', 'gallery' ),
    'edit_item' => _x( 'Edit Gallery', 'gallery' ),
    'new_item' => _x( 'New Gallery', 'gallery' ),
    'view_item' => _x( 'View Gallery', 'gallery' ),
    'search_items' => _x( 'Search Galleries', 'gallery' ),
    'not_found' => _x( 'No galleries found', 'gallery' ),
    'not_found_in_trash' => _x( 'No galleries found in Trash', 'gallery' ),
    'parent_item_colon' => _x( 'Parent Gallery:', 'gallery' ),
    'menu_name' => _x( 'Galleries', 'gallery' ),
);

$args = array( 
    'labels' => $labels,
    'hierarchical' => true,
    'description' => 'Image galleries for teachers classes',
    'supports' => array( 'title', 'editor', 'author'),

    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,

    'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png',
    'show_in_nav_menus' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'has_archive' => true,
    'query_var' => true,
    'can_export' => true,
    'rewrite' => true,
    'capability_type' => 'post',
    'capabilities' => array(
        'edit_post' => 'edit_gallery',
        'edit_posts' => 'edit_galleries',
        'edit_others_posts' => 'edit_other_galleries',
        'publish_posts' => 'publish_galleries',
        'read_post' => 'read_gallery',
        'read_private_posts' => 'read_private_galleries',
        'delete_post' => 'delete_gallery'
    )
);

register_post_type( 'gallery', $args );
}

Tôi cũng đã thử nghiệm điều này với một loại bài tùy chỉnh hoàn toàn mới và bất kể loại khả năng nào tôi cũng gặp vấn đề tương tự, ngay cả khi tôi loại bỏ nó và thêm loại tùy chỉnh của mình:

'capability_type' => array('movie','movies');

Câu trả lời:


40

Sau khi trò chuyện nhanh với Magicroundabout , người đã chỉ ra một tài nguyên hữu ích từ Justin Tadlock , hóa ra các khả năng cho các loại bài đăng tùy chỉnh không thực sự tồn tại trừ khi bạn sử dụng add_cap cho vai trò, ví dụ cho loại bài đăng tùy chỉnh sau:

add_action( 'init', 'register_cpt_gallery' );

function register_cpt_gallery() {
$labels = array( 
    'name' => _x( 'Galleries', 'gallery' ),
    'singular_name' => _x( 'Gallery', 'gallery' ),
    'add_new' => _x( 'Add New', 'gallery' ),
    'add_new_item' => _x( 'Add New Gallery', 'gallery' ),
    'edit_item' => _x( 'Edit Gallery', 'gallery' ),
    'new_item' => _x( 'New Gallery', 'gallery' ),
    'view_item' => _x( 'View Gallery', 'gallery' ),
    'search_items' => _x( 'Search Galleries', 'gallery' ),
    'not_found' => _x( 'No galleries found', 'gallery' ),
    'not_found_in_trash' => _x( 'No galleries found in Trash', 'gallery' ),
    'parent_item_colon' => _x( 'Parent Gallery:', 'gallery' ),
    'menu_name' => _x( 'Galleries', 'gallery' ),
);

$args = array( 
    'labels' => $labels,
    'hierarchical' => true,
    'description' => 'Image galleries for teachers classes',
    'supports' => array( 'title', 'editor', 'author'),
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'menu_icon' => get_bloginfo('template_url') . '/images/imagegallery.png',
    'show_in_nav_menus' => true,
    'publicly_queryable' => true,
    'exclude_from_search' => false,
    'has_archive' => true,
    'query_var' => true,
    'can_export' => true,
    'rewrite' => true,
    'capabilities' => array(
        'edit_post' => 'edit_gallery',
        'edit_posts' => 'edit_galleries',
        'edit_others_posts' => 'edit_other_galleries',
        'publish_posts' => 'publish_galleries',
        'read_post' => 'read_gallery',
        'read_private_posts' => 'read_private_galleries',
        'delete_post' => 'delete_gallery'
    ),
    // as pointed out by iEmanuele, adding map_meta_cap will map the meta correctly 
    'map_meta_cap' => true
);

register_post_type( 'gallery', $args );
}

các khả năng bổ sung phải được thêm vào vai trò để các quyền thực sự hoạt động trong phần phụ trợ, bao gồm cả 'quản trị viên' - ví dụ:

function add_theme_caps() {
    // gets the administrator role
    $admins = get_role( 'administrator' );

    $admins->add_cap( 'edit_gallery' ); 
    $admins->add_cap( 'edit_galleries' ); 
    $admins->add_cap( 'edit_other_galleries' ); 
    $admins->add_cap( 'publish_galleries' ); 
    $admins->add_cap( 'read_gallery' ); 
    $admins->add_cap( 'read_private_galleries' ); 
    $admins->add_cap( 'delete_gallery' ); 
}
add_action( 'admin_init', 'add_theme_caps');

Tôi hy vọng điều này hữu ích cho người khác.


11
add_theme_caps()chỉ được gọi một lần duy nhất, không phải mỗi khi trang quản trị được tải. Sẽ tốt hơn nếu sử dụng switch_themenhư hook để kích hoạt chủ đề hoặc register_activation_hookkích hoạt plugin.
d79

Tốt đẹp! Tôi thích sử dụng wp cli để thêm các khả năng nếu đó là một trang web hoàn toàn tùy chỉnh / duy nhất vì đó là hành động chỉ cần xảy ra một lần.
squarecandy

8

Thêm vào:

map_meta_cap => true

đến mảng $ args của bạn. Nhìn vào đây , để biết thêm. Hy vọng nó giúp!


1
Đây là những gì tôi cũng nghĩ nhưng không hoàn toàn là trường hợp.
erichmond

Điều này làm việc cho tôi
Shikyo

1

IMHO bạn không bao giờ lập bản đồ khả năng của riêng bạn. Hãy chắc chắn sử dụng plugin meta cap bản đồ để làm như vậy. http://codex.wordpress.org/Function_Reference/map_meta_cap

Tôi đã dành nhiều ngày cố gắng để lập bản đồ mũ tùy chỉnh của mình bằng mã. Chỉ cần cài đặt plugin đó, ánh xạ mũ của bạn và hủy kích hoạt sau khi làm việc. Nếu tạo vai trò tùy chỉnh, bạn S need cần plugin Thành viên .

Cách tôi kiểm tra để MAKE chắc chắn rằng vai trò của tôi có những capoverit đó (đôi khi bạn thề bạn làm nhưng thực tế không) tạo một trang gỡ lỗi với:

    if( !function_exists( 'current_user_has_role' ) ){
        function current_user_has_role( $role ){
            $current_user = new WP_User( wp_get_current_user()->ID );
            $user_roles = $current_user->roles;
            $is_or_not = in_array( $role, $user_roles );
            return $is_or_not;
        }
    }

Điều này sẽ cho bạn thấy những khả năng bạn làm trong thực tế có.


-1

Đối với các loại bài đăng tùy chỉnh, tôi KHÔNG đề xuất sử dụng hook:

add_action( 'registered_post_type', 'your_func', 10, 2 );

thay vào đó tôi đề nghị sử dụng:

add_filter( 'register_post_type_args', 'your_func', 10, 2 );
function your_func( $args, $name ) 
{
   if ( $name == "your_custom_post_name" ) 
   ...
}

đề nghị là một trong những tốt, nhưng nó không trả lời câu hỏi.
Aurovrata
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.