web-dev-qa-db-ja.com

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

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

  1. フロントエンドでiframeを使って画像アップローダを使う。
  2. 購読者レベルのユーザーにupload_filesキャップを追加し、アップロードした画像のみを表示するようにします。
  3. 私はこれを発見しました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. 私が画像アップローダを使っているフロントエンドページは "Entry"という名前です。

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

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

8
Sisir

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;
}
2
Sisir

これは私がメディアライブラリにユーザによってアップロードされたアイテムをリストするためにはたらきます。

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機能を持つすべてのユーザー(通常はadmin)がすべてのイメージを見ることを許可し、他のユーザーは自分のイメージだけを見ることができます。 $pagenowcurrent_user_canのように、いくつかの改良がなされています。美しさではありませんが、それは仕事をします

4
user983248