Tout savoir sur WordPress
Tutoriel WordPress

Ajouter un filtre par auteur dans l’administration

Dans l’administration, WordPress propose de filtrer nos articles par date et catégorie, mais il manque encore la possibilité de trier par auteur.

Quand nous sommes dans l’administration des articles ou d’un custom post type, l’un des inconvénients de WordPress est de ne pas proposer un filtre par auteur.

Cette fonction ajoute une liste déroulante des auteurs à côté des filtres existants (date et catégorie). Elle fonctionne sur le principe de filtrage par auteur qui est disponible lorsque vous cliquez sur un auteur dans les pages admin (par défaut sur la liste des articles et des pages).

Il faut insérer le code ci-dessous dans le fichier functions.php présent à la racine de votre thème.


add_action('restrict_manage_posts', 'gkp_restrict_manage_authors');
function gkp_restrict_manage_authors() {

    global $wpdb, $typenow;

    // On prepare la requete pour recuperer tous les auteurs qui ont publiés au moins 1 article
    $query = $wpdb->prepare( 'SELECT DISTINCT post_author
            FROM '. $wpdb->posts . '
            WHERE post_type = %s
        ', $typenow );

   // On recupere les id
   $users = $wpdb->get_col($query);

   // On génére le select avec la liste des auteurs
   wp_dropdown_users(array(
         'show_option_all'   => 'Voir tous les auteurs',
         'show_option_none'  => false,
         'name'              => 'author',
         'include'	     => $users,
         'selected'          => !empty($_GET['author']) ? (int)$_GET['author'] : 0,
         'include_selected'  => true
   ));
   
}

Ci-dessous, une capture d’écran du résultat :

Filtrer par auteur WordPress
Ajout d'un filtre par auteur

Cet article a été mis à jour il y a 1552 jours - Il n'est peut être plus à jour !

Article écrit par Jonathan B.

Jonathan est le co-fondateur de WP Media, startup connue pour être l’auteur de WP Rocket et Imagify. Il est aussi co-organisateur du WordCamp Lyon et Paris.

14 Commentaires

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

  1. Fonctionne très bien, merci Jonathan :)

    Attention, ton code à sauté dans le premier contrôle.
    Il faut remplacer les & amp; par deux esperluettes. Sinon utiliser AND à la place.

    Bonne soirée !

  2. Attention à la faille SQL injection !
    On ne mets pa de $_GET/$_POST/$_COOKIE/$_REQUEST direct dans une requête !

    $query = $wpdb->prepare( 'SELECT DISTINCT post_author
                        FROM '. $wpdb->posts . '
                        WHERE post_type = %s
                        AND post_status = "publish"
                    ', $_GET['post_type'] );
    

    Voilà qui est mieux, même si le post_type_exists($_GET[‘post_type’]) empêche le script d’aller plus loin, un bon $wpdb->prepare() est toujours bon ;)

  3. Belle réactivité !
    Sinon pour les bonnes pratiques WordPress, je dirai aussi qu’il faut rajouter un contrôle sur l’existence de la fonction :
    if ( !function_exists(‘restrict_manage_authors’) )

    C’est plus pratique lorsqu’on crée des child themes puisque ça permet « d’écraser » la fonction.

    Et le bonux pour la traduction :
    ‘show_option_all’ => __(‘Voir tous les auteurs’),

    J’aime bien ce genre de snippets, encore merci pour le partage ;)

  4. En fait quand tu fais un child theme, il me semble que le fichier functions.php du thème enfant est exécuté avant le fichier du même nom du thème parent. Ce qui fait que si tu veux écraser une fonction du thème parent, il te suffit de la déclarée avec le même nom dans le thème enfant.

    C’est le seul fichier qui est exécuté en addition au fichier du thème parent (avec d’abord le fichier du thème enfant, puis le fichier du thème parent), contrairement aux autres fichiers qui sont exécutés en remplacement à ceux du thème parent.

  5. Je viens de mettre à jour l’astuce. J’utilise à présent la variable global $typenow pour récupérer la valeur du custom post type courant.