Comment afficher la liste des articles par catégorie sur WordPress ?


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.

Installer une extension pour gérer le code PHP
Installer une extension pour gérer le code PHP

Pour ajouter un nouveau morceau de code, allez dans le sous-menu PHP Code Snippets et cliquez sur "Add new PHP Code Snippet".

Créer un nouveau shortcode

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 :

Lister les articles par catégorie sur WordPress
Lister les articles par catégorie sur WordPress

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 :

Classement des articles par ordre alphabétique
Classement des articles 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 !

Code PHP
Code PHP

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.

Peut-on lister les articles d'une catégorie précise comportant une même étiquette ?

Imaginons maintenant que vous souhaitiez lister les articles ayant une même étiquette mais seulement pour une catégorie précise. Par exemple, je souhaite afficher mes articles qui comportent le tag "SEO" mais seulement s'ils sont dans la catégorie "Optimiser son site web".

Même méthodologie encore une fois, avec la création d'un shortcode en utilisant ce code php :

$args = array(
    'category_name' => 'optimiser-site-web', // Indiquez ici le slug de la catégorie que vous souhaitez isoler
    'tag' => 'seo', // Indiquez ici le slug de l'étiquette que vous voulez afficher
    'posts_per_page' => 10, // Nombre de posts à afficher, mettez -1 pour tous les afficher
);

$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a></li>';
    }
    echo '</ul>';
} else {
    echo 'Aucun article trouvé.';
}

wp_reset_postdata();

Les articles partageant la même étiquette et appartenant à la catégorie choisie sont affichés sous forme de liste.

Voilà, j'espère que ce tuto vous aidera à utiliser facilement ces fonctions sur votre site !


Poster un commentaire

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

3 commentaires sur “Comment afficher la liste des articles par catégorie sur WordPress ?
  • Erika

    Bonjour
    Merci pour cet article !
    Moi j’aimerai lister tous les articles liées à une étiquette mais pour une catégorie.
    Ex : j’ai une catégorie X (avec des sous catégories) et une catégorie Y (avec sous catégorie). Chacun des articles sont reliés soit à X soit à Y (catégories) et à une ou des étiquettes.

    Je voudrais par exemple lister les articles correspondant à l’étiquette 1 mais que pour la catégorie X

    Comment faire ? quel code ou quel plugin ?
    Je cherche depuis des jours sans succès.

    Répondre à Erika
    • Marlène

      Bonjour Erika, je réponds tardivement car je pense que la réponse peut intéresser d’autres personnes, j’ai donc rédigé un paragraphe en plus dans l’article (dernier paragraphe) en donnant un bout de code à personnaliser pour afficher les articles ayant une même étiquette et étant rattachés à une catégorie spécifique.

      Répondre à Marlène
  • Pierre

    Merci pour cet article, j’ai longtemps cherché avant de le trouver et il m’est bien utile !

    Répondre à Pierre


Si vous aimez les articles du site, n'hésitez pas à faire vos achats sur Amazon.fr via ce lien ; il me permettra de toucher une commission grâce au programme Partenaires Amazon EU.