Libreria multimediale per elencare le immagini caricate solo dall'utente


9

Voglio elencare le immagini solo per l'immagine caricata dall'utente. Ecco lo scenario:

  1. Utilizzando l'uploader di immagini sul front-end utilizzando iframe.
  2. Ho aggiunto un upload_fileslimite agli utenti a livello di abbonato e voglio che vedano solo le immagini che hanno caricato.
  3. Ho trovato questo Q Restringere gli utenti a visualizzare solo gli elementi della libreria multimediale che hanno caricato? ma la risposta accettata non funziona per me.

    // 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 pagina di front-end che sto utilizzando l'uploader di immagini è denominata "Voce".

  5. Se rimuovo questa parte del codice, if( 'upload.php' != $pagenow ) return;il codice funziona. Penso di dover migliorare quella parte del codice condizionale ma non sono riuscito a capirlo. Il condizionale è importante perché non voglio che il codice si applichi su altre pagine dove non è richiesto.

Quindi, ho bisogno di aiuto per migliorare la parte condizionale, come ho già detto. Grazie!


1
Se stai copiando / incollando il codice, esegui le seguenti operazioni: Se hai inserito il codice solo nel nome di una funzione, aggiungi la giusta quantità di spazi in modo che functionnon si allinei con il contenuto fn.
Kaiser

Risposte:


5

Questo funziona per me al fine di elencare gli elementi caricati da un utente nella libreria multimediale.

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

Consentirà a tutti gli utenti con la manage_optionscapacità (di solito admin) di vedere tutte le immagini, gli altri utenti vedranno solo le proprie immagini. Si noti che alcuni miglioramenti possono essere apportati come $pagenowe current_user_can. Non è una bellezza ma fa il lavoro


2
Idealmente, proveresti a confrontare qualche parte del wp_upload_dir()risultato.
Kaiser

2

Il modulo di caricamento multimediale che stavo tirando su tramite thickbox era media-upload.php. Quindi, ho dovuto cambiare il condizionale a if( 'upload.php' != $pagenow && 'media-upload.php' != $pagenow). Ho dimenticato di guardare nel posto ovvio :)

// 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;
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.