Médiathèque pour répertorier les images uniquement téléchargées par l'utilisateur

9

Je souhaite répertorier les images uniquement pour les images téléchargées par les utilisateurs. Voici le scénario:

  1. Utilisation du téléchargeur d'images sur le front-end en utilisant iframe.
  2. J'ai ajouté une upload_fileslimite aux utilisateurs au niveau abonné et je veux qu'ils ne voient que les images qu'ils ont téléchargées.
  3. J'ai trouvé ce Q Restreindre les utilisateurs à afficher uniquement les éléments de la bibliothèque multimédia qu'ils ont téléchargés? mais la réponse acceptée ne fonctionne pas pour moi.

    // 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. La page frontend que j'utilise le téléchargeur d'images est nommée "Entrée".

  5. Si je supprime cette partie du code, if( 'upload.php' != $pagenow ) return;le code fonctionne. Je pense que je dois améliorer cette partie du code conditionnel mais je n'ai pas pu le comprendre. Le conditionnel est important parce que je ne veux pas que le code s'applique sur d'autres pages où il n'est pas requis.

J'ai donc besoin d'aide pour améliorer la partie conditionnelle comme je l'ai mentionné. Merci!

Sisir
la source
1
Si vous copiez / collez du code, procédez comme suit: Si vous avez uniquement encapsulé votre code dans un nom de fonction, veuillez ajouter la quantité appropriée d'espaces afin de functionne pas l'aligner avec le contenu fn.
kaiser

Réponses:

5

Cela fonctionne pour moi afin de répertorier les éléments téléchargés par un utilisateur sur la médiathèque.

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

Il permettra à tous les utilisateurs ayant la manage_optionscapacité (généralement administrateur) de voir toutes les images, les autres utilisateurs ne verront que leurs propres images. Notez que quelques améliorations peuvent être apportées comme $pagenowet current_user_can. Pas une beauté mais ça fait le boulot

user983248
la source
2
Idéalement, vous essayez de comparer une partie du wp_upload_dir()résultat.
kaiser
2

Le formulaire de téléchargement des médias que je tirais via thickbox était media-upload.php. J'ai donc dû changer le conditionnel en if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). J'ai oublié de regarder l'endroit évident :)

// 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;
}
Sisir
la source