Sviluppando siti multiauthor o portali in cui l’accesso al backoffice è molto “frequentato” da non addetti ai lavori, può emergere l’esigenza di limitare le operazioni possibili sui media uploadati. Di default infatti la libreria media WP è accessibile a tutti i ruoli a partire da quello di “author”.

In caso quindi di utilizzo del backoffice da parte di persone  non appartenenti allo staff è opportuno inibire le possibilità di editing e cancellazione delle immagini e dei media della libreria ad eccezione di quelle caricate dall’autore stesso.

Per fare questo si può utilizzare questa funzione:

add_action('pre_get_posts','users_only_media');
 function users_only_media( $wp_query_obj ) {

     global $current_user, $pagenow;

     if( !is_a( $current_user, 'WP_User') )
         return;
//return se non si riconosce come user WP

     if( 'upload.php' != $pagenow )
         return;
//return se non siamo nella pagina della libreria media

     if( !current_user_can('edit_others_posts') )
         $wp_query_obj->set('author', $current_user->id );
//se il livello minimo non è quello di editore limita per autore
     return;
 }

La funzione interviene sull’hook ‘pre_get_posts’ e modifica WP_query aggiungendo il parametro ‘author’ che deve coincidere con quello dell’utente attuale ‘current_user->id’.

In questo modo gli users possono continuare a vedere e utilizzare le immagini della libreria media ma non possono modificare o cancellare quelle inserite da altri autori.