Thư viện phương tiện để liệt kê hình ảnh chỉ người dùng tải lên


9

Tôi muốn liệt kê hình ảnh cho chỉ người dùng tải lên hình ảnh. Đây là kịch bản:

  1. Sử dụng trình tải lên hình ảnh ở mặt trước bằng iframe.
  2. Tôi đã thêm upload_filesgiới hạn cho người dùng cấp thuê bao và muốn họ chỉ xem hình ảnh họ đã tải lên.
  3. Tôi đã tìm thấy Q này Hạn chế người dùng chỉ xem các mục trong thư viện phương tiện mà họ đã tải lên? nhưng câu trả lời được chấp nhận không làm việc cho tôi.

    // Code originally by @t31os
    add_action('pre_get_posts','users_own_attachments');
    
    function users_own_attachments( $wp_query_obj ) 
    {
        global $current_user, $pagenow;
    
        if( !is_a( $current_user, 'WP_User') )
            return;
    
        if( 'upload.php' != $pagenow )
            return;
    
        if( !current_user_can('delete_pages') )
            $wp_query_obj->set('author', $current_user->id );
    
        return;
    }
  4. Trang frontend tôi đang sử dụng trình tải lên hình ảnh được đặt tên là "Entry".

  5. Nếu tôi loại bỏ phần này của mã if( 'upload.php' != $pagenow ) return;, mã sẽ hoạt động. Tôi nghĩ rằng tôi phải cải thiện một phần của mã điều kiện nhưng không thể tìm ra nó. Điều kiện rất quan trọng vì tôi không muốn mã áp dụng trên các trang khác không cần thiết.

Vì vậy, tôi cần giúp đỡ để cải thiện phần điều kiện như tôi đã đề cập. Cảm ơn!


1
Nếu bạn đang sao chép / dán mã, vui lòng làm như sau: Nếu bạn chỉ bọc mã của mình trong một tên hàm, vui lòng thêm số lượng khoảng trống thích hợp để functionkhông phù hợp với nội dung fn.
kaiser

Câu trả lời:


5

Điều này hoạt động với tôi để liệt kê các mục được tải lên bởi người dùng trên thư viện phương tiện.

function users_my_media_only( $wp_query ) {
    if ( false !== strpos( $_SERVER[ 'REQUEST_URI' ], '/wp-admin/upload.php' ) ) {
        $current_user = wp_get_current_user();
        $current_user = $current_user->ID;
        if ( ! current_user_can( 'manage_options' ) ) {
            global $current_user;
            $wp_query->set( 'author', $current_user->id );
        }
    }
}
add_filter('parse_query', 'users_my_media_only' );

Nó sẽ cho phép tất cả người dùng có manage_optionskhả năng (thường là quản trị viên) xem tất cả hình ảnh, những người dùng khác sẽ chỉ nhìn thấy hình ảnh của chính họ. Lưu ý rằng một vài cải tiến có thể được thực hiện như $pagenowcurrent_user_can. Không phải là một vẻ đẹp nhưng nó làm công việc


2
Lý tưởng nhất là bạn cố gắng so sánh với một phần của wp_upload_dir()kết quả.
kaiser

2

Các hình thức tải lên phương tiện truyền thông mà tôi đã kéo lên thông qua thickbox là media-upload.php. Vì vậy, tôi đã phải thay đổi điều kiện để if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). Tôi quên nhìn vào nơi rõ ràng :)

// Code originally by @t31os
add_action('pre_get_posts','users_own_attachments');

function users_own_attachments( $wp_query_obj ) 
{
    global $current_user, $pagenow;

    if( !is_a( $current_user, 'WP_User') )
        return;

    if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow)
        return;

    if( !current_user_can('delete_pages') )
        $wp_query_obj->set('author', $current_user->id );

    return;
}
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.