Depuis la création de ce site, je pioche régulièrement parmi vos questions pour rédiger des posts… et en voici une que j’ai reçue plusieurs fois : comment afficher la liste des articles par catégorie sur WordPress ?
Dans cet article, je vous explique quelle méthode vous pouvez utiliser pour faire une liste de posts triés par catégorie sans trop mettre les mains dans le code… et comment lister aussi les posts rattachés à une étiquette précise sur WordPress.
Etape 1 – Installer une extension permettant d’utiliser du code PHP
Le code qui permet d’afficher une liste d’articles par catégorie sur WordPress est écrit en langage PHP. Pour pouvoir l’afficher aisément dans un article, vous pouvez par exemple utiliser l’extension gratuite Insert PHP Code Snippet. Elle permet de mémoriser les morceaux de code de son choix et de les transformer en shortcode à insérer où vous le souhaitez (dans un article, une page, etc).
Il suffit d’installer le plugin depuis le menu Extensions > Ajouter de WordPress et de l’activer. Il va créer un nouvel élément de menu baptisé « XYZ PHP Code » dans l’administration de WordPress.

Pour ajouter un nouveau morceau de code, allez dans le sous-menu PHP Code Snippets et cliquez sur « Add new PHP Code Snippet ».
Etape 2 – Le code pour afficher la liste des articles par catégorie
Le code que je vais vous fournir à présent permet d’afficher une liste des articles de votre site par catégorie. Le titre de la catégorie est mis en exergue grâce à une balise h2, elles sont présentées par ordre alphabétique et les posts sont ensuite répertoriés sous forme de liste du plus récent au plus ancien, comme ceci :

Le code à utiliser
Dans PHP Code Snippets, nommez votre code, par exemple « postsparcat »… et insérez le code php ci-dessous :
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'taxonomy' => 'category'
);
$categories = get_categories( $args );
foreach( $categories as $category ) {
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'name',
'terms' => $category->name
)
)
);
$posts = get_posts( $args );
echo '<h2>' . $category->name. '</h2>';
echo '<ul>';
foreach( $posts as $post ) {
echo '<li><a href="' . get_permalink( $post->ID ) . '">' . $post->post_title . '</a></li>';
}
echo '</ul>';
}
Une fois le code sauvegardé, PHP Code Snippets génère automatiquement un shortcode, [xyz-ips snippet="postsparcat"]
dans ce cas précis, que vous pouvez insérer dans un article ou une page pour faire apparaître la liste sur votre blog.
Que dit ce morceau de code ? Il demande à WordPress d’aller récupérer la liste des catégories par ordre alphabétique grâce à la fonction « get_categories() » et aux paramètres « orderby » et « order » (qui définissent qu’on récupère les catégories par nom en les classant dans l’ordre ascendant – ASC).
Pour chaque catégorie (foreach( $categories as $category )), on va ensuite lister les articles qui s’y rattachent.
Quelques notions de personnalisation
Par défaut, seuls 5 articles sont affichés pour chaque catégorie. Si vous souhaitez en afficher plus, il faut ajouter le paramètre « posts_per_page » à cette partie du code :
$categories = get_categories( $args );
foreach( $categories as $category ) {
$args = array(
'post_type' => 'post',
'posts_per_page' => 10,
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'name',
'terms' => $category->name
Dans l’exemple ci-dessus, j’affiche 10 articles. Si vous souhaitez tous les lister, remplacez « 10 » par « -1 ».
Vous pouvez aussi changer l’ordre dans lequel les catégories sont récupérées, en jouant sur le paramètre « orderby ». Dans l’exemple que je vous donnais, « orderby » était réglé sur « name » (on récupérait donc les catégories sur la base de leur nom)… mais on peut utiliser à la place le paramètre « term_id » si vous souhaitez les récupérer dans l’ordre de leur création.
Si vous souhaitez modifier l’ordre dans lequel les articles eux-mêmes sont listés, il faut cette fois-ci ajouter un paramètre « orderby » pour contrôler l’ordre dans cette partie du code :
$categories = get_categories( $args );
foreach( $categories as $category ) {
$args = array(
'post_type' => 'post',
'orderby' => 'title',
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'category',
'field' => 'name',
'terms' => $category->name
Vous pouvez choisir parmi les paramètres de tri prévus par WordPress, par exemple :
- « title », pour classer les articles par titre (ce que je montre dans mon exemple) ;
- « ID », pour classer les catégories en fonction de leur identifiant unique ;
- « date », pour les classer par date ;
- « modified », pour les classer par date de dernière modification ;
- « rand », pour un classement aléatoire.
- « comment_count », pour classer les articles en fonction du nombre de commentaires qu’ils ont reçu.
Même chose, l’ordre peut être croissant (« ASC ») ou décroissant (« DESC »).
Voici par exemple un tri des posts par ordre alphabétique :

Et si ça ne marche pas ?
J’ai bien entendu testé le code fourni avant de vous le communiquer… mais si vous rencontrez un problème, vérifiez que vous n’avez pas oublié de copier un signe de ponctuation. En PHP, tout a son importance ! L’oubli d’une virgule, d’une parenthèse, la non-fermeture d’un guillemet peut déboucher sur une page blanche.
De même, s’il y a des majuscules/minuscules à certains endroits, cela peut aussi avoir son importance !
Notez que pour tester vos personnalisations, vous pouvez tout à fait copier le shortcode dans un article ou une page en brouillon, et utiliser le mode « Prévisualiser » de WordPress pour voir si vos modifications fonctionnent… au lieu de publier le contenu directement. Ainsi, vous ne prenez aucun risque en cas de problème d’affichage, vous seul verrez l’erreur !

Peut-on lister les articles par étiquette sur WordPress ?
C’est un peu la suite logique de la première partie de ce tuto : et si vous avez besoin de faire un listing cette fois-ci par tag (« étiquette »), pour récupérer la liste des articles WordPress pour une étiquette donnée ?
C’est là encore tout à fait possible. La méthodologie est la même, avec la création d’un nouveau shortcode sur PHP Code Snippets. Cette fois-ci, vous pouvez l’appeler « postspartag » par exemple… et copier dedans ce code :
$tags = get_tags();
foreach ( $tags as $tag ) {
echo '<h2>' . $tag->name . '</h2>';
$args = array(
'tag_id' => $tag->term_id,
'posts_per_page' => -1
);
$posts = get_posts( $args );
echo '<ul>';
foreach( $posts as $post ) {
echo '<li><a href="' . get_permalink( $post->ID ) . '">' . $post->post_title . '</a></li>';
}
echo '</ul>';
wp_reset_postdata();
}
On utilise cette fois-ci la fonction « get_tags » pour récupérer les étiquettes… puis on affiche le titre de chacune entourée de balises h2. Après ce titre, on récupère les articles associés à chaque tag avec la fonction get_posts et on les liste.
Comme dans l’exemple précédent, vous pouvez modifier la ligne « posts_per_page » pour afficher un nombre plus ou moins élevé d’articles.
Voilà, j’espère que ce tuto vous aidera à utiliser facilement ces fonctions sur votre site !