Filtrer les médias Wordpress par utilisateur

La gestion des médias Wordpress se fait sans aucun filtre, ce qui peut poser quelques problèmes tant au niveau organisation que au niveau sécurité et droits d'usage sur des sites avec plusieurs rédacteurs. Chaque rédacteur peut donc voir et utiliser les médias des autres sans restriction.

Comme souvent, il existe des plugins à installer sur votre site Wordpress pour régler cela, mais quelques lignes de code peuvent suffire également et donc éviter d'installer un plugin supplémentaire et ne pas multiplier les extensions externes.

Pour filtrer l'accès par utilisateur, il suffit d'ajouter au fichier functions.php de votre thème :

add_filter( 'ajax_query_attachments_args', 'show_current_user_attachments' );
function show_current_user_attachments( $query ) {
   
    $user_id = get_current_user_id();
    if ( $user_id ) {
        $query['author'] = $user_id;
    }
    return $query;
   
}

Chaque utilisateur ne verra alors plus que les medias qu'il a ajouté lui-même. En l'état, cela peut poser un autre problème, pour la modération, si l'administrateur peut avoir besoin de modérer le contenu du site, il ne pourra plus accéder aux médias des autres rédacteurs.

On peut donc régler ça en détectant le rôle de l'utilisateur avant d'imposer le filtre pour donner le plein accès aux administrateurs :

$user = wp_get_current_user();
if ( in_array( 'administrator', (array) $user->roles ) ) { }
else {   
add_filter( 'ajax_query_attachments_args', 'show_current_user_attachments' );
function show_current_user_attachments( $query ) {
   
    $user_id = get_current_user_id();
    if ( $user_id ) {
        $query['author'] = $user_id;
    }
    return $query;
   
}
}
BLOG COMMENTS POWERED BY DISQUS