Tại sao vai trò WP tùy chỉnh của tôi cần edit_posts để chỉnh sửa hình ảnh?


7

Điều này có thể rõ ràng với một người khác ngoài tôi. Tôi nghĩ rằng tôi nhớ đã đọc ở đâu đó rằng một "hình ảnh" thực sự là một dạng của "bài viết".

  • Tôi có một loại bài tùy chỉnh được gọi là "danh sách"
  • Tôi có một vai trò WP tùy chỉnh của "khách hàng"

Khi tôi đăng nhập với tư cách là "khách hàng" và tôi khởi chạy cửa sổ bật lên phương tiện, duyệt đến một hình ảnh, nhấp vào "hiển thị" để mở nó lên và sau đó nhấp vào "chỉnh sửa hình ảnh", tôi nhận được -1. I E. không có gì khác hiển thị ngoài "-1".

Tôi có thể khắc phục sự cố này bằng cách gán cho vai trò tùy chỉnh của mình khả năng của "edit_posts". Tại sao lại thế này? Ngay khi tôi làm điều này, tôi đang gặp vấn đề khác, vai trò người dùng "khách hàng" hiện có quyền truy cập vào các bài đăng, nhận xét và công cụ mà tôi không muốn.

Có lẽ tôi đã không thiết lập đúng loại bài đăng của mình với các khả năng? Làm cách nào tôi có thể cho phép "khách hàng" chỉnh sửa ảnh nhưng không có quyền truy cập vào bài viết?

      $args = array(
    'label' => 'Listing',
    'description' => '',
    'public' => true,
    'show_ui' => true,
    'show_in_menu' => true,
    'show_in_nav_menus' => true,
    'map_meta_cap' => true,
    'capability_type' => 'listing',
    'capabilities' => array(
                    'edit_post' => 'edit_listing',
                    'read_post' => 'read_listing',
                    'delete_post' => 'delete_listing',
                    'edit_posts' => 'edit_listings',
                    'edit_others_posts' => 'edit_others_listings',
                    'publish_posts' => 'publish_listings',
                    'read_private_posts' => 'read_private_listings',
                    'delete_posts' => 'delete_listings',
                    'delete_private_posts' => 'delete_private_listings',
                    'delete_published_posts' => 'delete_published_listings',
                    'delete_others_posts' => 'delete_others_listings',
                    'edit_private_posts' => 'edit_private_listings',
                    'edit_published_posts' => 'edit_published_listings',
                ),
    'menu_position' => 5, 
    'hierarchical' => false,
    'has_archive' => false, 
    'rewrite' => array('slug' => 'listing'), 
    'query_var' => true,
    'supports' => array('title'),
    'labels' => $labels
  ); 

Dưới đây là các khả năng tôi gán cho vai trò wordpress tùy chỉnh của mình trong trường hợp bất kỳ ai cũng có thể phát hiện ra điều gì đó delete_listing delete_listings delete_published_listings edit_listing edit_listings edit_published_listings publish_listing publish_listings read read_listing upload_files Và tôi dường như cũng cần những điều sau đây để chỉnh sửa & xóa hình ảnh. Nghĩ rằng những điều này sẽ được ánh xạ lại vào edit_listings và xóa_listings edit_posts delete_posts
Andrew

Tôi tìm thấy bài viết sau đây mà tôi hiện đang tìm kiếm. Có vẻ là một vấn đề lớn hơn tôi nghĩ nơi yêu cầu edit_posts. Có vẻ như có một vấn đề chung khi sử dụng loại bài đăng tùy chỉnh + vai trò tùy chỉnh + phân loại wordpress.org/support/topic/ mẹo
Andrew

Câu trả lời:


0

Nếu tôi phải đoán: bởi vì hình ảnhTệp đính kèmTệp đính kèmLoại đăng . Vì vậy, để chỉnh sửa một hình ảnh, là một tệp đính kèm, là một bài đăng, đòi hỏi phải có edit_postkhả năng.

BIÊN TẬP

Bạn không capabilityđảo ngược các khóa / giá trị mảng ánh xạ?

ví dụ như bạn có 'edit_posts' => 'edit_listings'. Thay vào đó không nên 'edit_listings' => 'edit_posts'?


Trong thiết lập loại bài đăng tùy chỉnh của tôi ở trên, tôi đã ánh xạ lại bởi edit_posts để edit_listings và vai trò wordpress tùy chỉnh có "edit_listings" được gán cho nó. Tôi nghĩ rằng đây là mục đích của ánh xạ lại chúng, có lẽ tôi đã sai?
Andrew

Xem chỉnh sửa trong câu trả lời cập nhật.
Chip Bennett

Bennett Tôi đã đảo ngược chúng nhưng dường như nó không có bất kỳ ảnh hưởng nào và tôi vẫn cần edit_posts để có thể chỉnh sửa hình ảnh. Vẫn hiển thị -1 mà không có nó. Ban đầu tôi đã theo dõi ví dụ "thiết lập loại bài đăng tùy chỉnh" của Justin Tadlock bên dưới nơi anh ấy có _posts ở bên trái và các khả năng được ánh xạ lại ở bên phải. justintadlock.com/archives/2010/07/10/ trên
Andrew

Sau một thời gian làm việc với các loại bài đăng tùy chỉnh, vai trò và khả năng tôi tin rằng tôi hiểu chúng nhiều hơn nữa. Bạn đã đúng, một hình ảnh là một bài đăng, do đó để người dùng có thể chỉnh sửa một hình ảnh họ đã tải lên, họ cần edit_posts. Đối với họ để xóa một hình ảnh, họ cần delete_posts. Tuy nhiên, không chắc chắn tại sao edit_listingsbản đồ của tôi không chính xác edit_postsở vị trí đầu tiên.
Andrew

6

Tôi biết câu hỏi này đã được một năm tuổi, nhưng tôi mới phát hiện ra trên thực tế có một cách để đạt được điều này, vì vậy, đăng nó ở đây trong trường hợp nó hữu ích cho người khác:

add_filter( 'user_has_cap', 'my_user_has_cap', 10, 3 );

function my_user_has_cap( $user_caps, $req_cap, $args ) {

    $post = get_post( $args[2] );

    if ( 'attachment' != $post->post_type )
        return $user_caps;

    if ( 'delete_post' == $args[0] ) {

        if ( $user_caps['delete_others_posts'] )
            return $user_caps;

        if ( !isset( $user_caps['delete_others_listings'] ) or !$user_caps['delete_others_listings'] )
            return $user_caps;

        $user_caps[$req_cap[0]] = true;

    }

    if ( 'edit_post' == $args[0] ) {

        if ( $user_caps['edit_others_posts'] )
            return $user_caps;

        if ( !isset( $user_caps['edit_others_listings'] ) or !$user_caps['edit_others_listings'] )
            return $user_caps;

        $user_caps[$req_cap[0]] = true;

    }

    return $user_caps;

}

Điều này chủ yếu dựa trên bài viết Codex này .

Tôi vẫn nhận được các bộ lọc khả năng vòng đầu của mình và bây giờ là 2:04 sáng, vì vậy mã của tôi có thể được ứng biến ...


Điều này làm việc cho tôi. Chỉ cần một lưu ý, có thêm ")" trong dòng mã đầu tiên. Trong trường hợp của tôi, vì tôi đang sử dụng một plugin để chỉ hiển thị cho mọi người tải lên của riêng họ, tất cả những gì tôi cần là câu lệnh if để kiểm tra xem đây có phải là tệp đính kèm không.
coopersita

rất vui vì nó hữu ích cho bạn - giờ tôi đã gỡ bỏ khung không liên quan, cảm ơn vì đã phát hiện ra điều đó.
Simon Blackbourn
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.