web-dev-qa-db-fra.com

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

Je veux lister les images pour l'image téléchargée uniquement par l'utilisateur. Voici le scénario:

  1. Utilisation de l’importateur d’images en mode frontal avec iframe.
  2. J'ai ajouté upload_files cap aux utilisateurs du niveau abonné et je veux qu'ils ne voient que les images qu'ils ont téléchargées.
  3. J'ai trouvé ceci 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 que je suis en train d'utiliser le programme de téléchargement d'images s'appelle "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 ne pouvais pas le comprendre. La condition est importante car je ne veux pas que le code s’applique à 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!

8
Sisir

Le formulaire de téléchargement de média que j’étais en train d’arriver via thickbox était media-upload.php. Donc, je devais changer le conditionnel à if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). J'ai oublié de regarder dans 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;
}
2
Sisir

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

Cela permettra à tous les utilisateurs dotés de la capacité manage_options (généralement admin) de voir toutes les images, les autres utilisateurs ne verront que leurs propres images. Notez que quelques améliorations peuvent être apportées comme $pagenow et current_user_can. Pas une beauté mais ça fait le boulot

4
user983248