Astuces & Snippets 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.

S'inscrire à la newsletter

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

14 commentaires
  1. deadlink le

    ;-) bien utile

  2. Geoffrey le

    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 !

  3. BoiteAWeb le

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

  4. BoiteAWeb le

    Quelle réactivité ! 10mn !!

  5. Geoffrey le

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

  6. Geoffrey le

    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.

  7. pilooz le

    Extra cette snippet, ça fonctionne aussi en multi-sites.
    Merci.

  8. FRED le

    Excellent ! Merci beaucoup. C’est con, mais cela devrait être natif.

Poster un commentaire

Les champs obligatoires sont indiqués avec *

Ici, on utilise KeywordLuv. Entrez YourName@YourKeywords dans le formulaire "Pseudo" pour bénéficier des avantages SEO d'un mot-clef ciblé. Attention, tous les commentaires non-constructifs ne bénéficieront pas d'une ancre optimisée.

Prévenez moi de tous les nouveaux commentaires par email.

Ne plus afficher|Fermer
Suivez-nous sur Facebook !