ユーザーがアップロードした画像のみをリストするメディアライブラリ


9

ユーザーがアップロードした画像のみを一覧表示したい。ここにシナリオがあります:

  1. iframeを使用してフロントエンドで画像アップローダーを使用します。
  2. upload_filesサブスクライバーレベルのユーザーに上限を追加し、アップロードした画像のみを表示したい。
  3. このQを見つけましたQ ユーザーがアップロードしたメディアライブラリアイテムのみを表示するように制限していますか?しかし、受け入れられた答えは私のために機能しません。

    // 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. 画像アップローダーを使用しているフロントエンドページの名前は「エントリ」です。

  5. コードのこの部分を削除すると、コードif( 'upload.php' != $pagenow ) return;は機能します。条件付きコードのその部分を改善する必要があると思いますが、理解できませんでした。コードが必要でない他のページにコードを適用したくないので、条件が重要です。

だから、私が述べたように私は条件部分を改善するための助けが必要です。ありがとう!


1
コードをコピーして貼り付ける場合は、次のようにしてください。コードを関数名で囲むだけの場合はfunction、fnの内容と一致しないように適切なスペースを追加してください。
カイザー

回答:


5

これは、ユーザーがメディアライブラリにアップロードしたアイテムを一覧表示するために機能します。

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

manage_options機能(通常は管理者)を持つすべてのユーザーがすべての画像を見ることができ、他のユーザーは自分の画像だけを見ることができます。いくつかの改善点は次のように行うことができることに注意してください$pagenowcurrent_user_can。美しさではありませんが、それは仕事をします


2
理想的には、wp_upload_dir()結果の一部と比較しようとするでしょう。
カイザー2012年

2

私がthickbox経由でプルアップしていたメディアアップロードフォームはでしたmedia-upload.php。そのため、条件をに変更する必要がありましたif( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow)。私は明白な場所を調べるのを忘れていました:)

// 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;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.