Un gabarit affiche parfois plus qu’une seule liste d’articles : les trois derniers billets d’une catégorie précise dans la barre latérale, en plus du contenu principal de la page. Cela suppose d’interroger la base une seconde fois, indépendamment de ce que WordPress a déjà préparé.
Fonctionnement dans WordPress
On instancie pour cela un nouvel objet WP_Query avec ses propres arguments, plutôt que de modifier la requête principale. Il est essentiel d’appeler wp_reset_postdata() une fois la boucle terminée, afin de restaurer les données globales de l’article courant pour la suite du gabarit.
Exemple
$actus = new WP_Query( array(
'category_name' => 'actualites',
'posts_per_page' => 3,
) );
while ( $actus->have_posts() ) {
$actus->the_post();
the_title();
}
wp_reset_postdata();
À ne pas confondre avec
Modifier la requête principale via le hook pre_get_posts, une approche préférable quand on veut changer ce qu’affiche une page d’archive existante plutôt qu’ajouter une liste supplémentaire à côté ; utiliser query_posts() pour ce même besoin est officiellement déconseillé car cette fonction recharge intégralement et inutilement la requête principale.
Bon à savoir
Pour de simples besoins d’affichage sans pagination ni détection de fin de liste, la fonction get_posts() offre un raccourci plus léger que WP_Query, tout en s’appuyant en interne sur la même classe.
Une requête personnalisée trop gourmande, sans limite explicite sur posts_per_page, peut ralentir sensiblement une page qui en contient déjà plusieurs autres ; il est courant de plafonner ce genre de listes secondaires à quelques éléments seulement, contrairement à la requête principale.