WordPress, controler l’affichage de votre liste de billets via query_posts()

Aujourd'hui je vais vous expliquer comment contrôler précisément l'affichage de votre liste de billets WordPress grâce à la fonction query_posts().

Tout d'abord, à quoi celà peut-il vous servir ?

Et bien grâce à query_posts(), vous allez pouvoir très facilement:

  • Retirer une ou plusieurs catégories de votre liste de billets
  • N'afficher qu'une ou deux catégories
  • Afficher uniquement les billets qui ont un certain tag
  • Afficher tous les billets rédigés par un même auteur
  • Afficher une page ou un billet précis via son nom ou son ID
  • Contrôler le nombre de billets à afficher
  • Choisir l'ordre de tri des billets (par date, catégorie, titre, auteur)
  • Inverser l'ordre
  • Appliquer un offset sur la liste, pour commencer à afficher la liste en excluant un nombre X de premiers billets
  • Afficher les billets qui ont été publiés à un moment précis (secondes, minutes, heures, jours, mois, années)
  • Choisir le nombre de billets par page à afficher

Voilà, je pense que vous avez compris tout l'intérêt de cette fonction, qui en une seule ligne peut vous rendre bien des services !

Prèt ? C'est parti !

Comment on utilise la fonction query_posts() ?

C'est très simple, il faut placer la fonction juste au dessus du début de votre boucle, dans votre template.

span class="st0">"...."

Donc on place query_posts() juste avant le while.

Exclure ou afficher uniquement les billets d'une ou plusieurs catégories

span class="st0">"cat=4"); //Affiche uniquement les billets de la catégorie avec une ID=4
"cat=-4"); //Affiche tout sauf les billets de la catégorie avec une ID=4
"category_name=Categorie1"); //Affiche uniquement les billets de la catégorie "Categorie1"
"cat=1,2,4,5,7"); //Affiche uniquement les billets des catégories 1,2,4,5 et 7

Vous pouvez donc cumuler les catégories sans soucis, par contre l'exclusion de fonction qu'avec les ID, pas les noms.

Afficher uniquement les billets d'un ou plusieurs tags

span class="st0">"tag=google"); //Affiche uniquement les billets qui ont le tag "google"
"tag=google,yahoo"); //Affiche uniquement les billets qui ont le tag "Google" OU ""yahoo"
"tag=google+yahoo+msn"); //Affiche uniquement les billets qui contiennent les 3 tags !

Comme les tags n'ont pas de ID, il n'est pas encore possible d'en exclure, dommage. Par contre le choix entre OU et ET est assez intéressant !

Exclure ou afficher uniquement les billets d'une ou plusieurs Auteurs

span class="st0">"author_name=k-ny,admin"); //Affiche uniquement les billets des auteurs "k-ny" et "admin"
"author=2"); //Affiche uniquement les billets de l'auteur avec une ID=2
"author=-4"); //Exclu les billets de l'auteur avec une ID=4

Donc ici ça fonctionne exactement comme pour les catégories, on peut cumuler et exclure par ID

Afficher un billet ou une page précise

span class="st0">"p=1"); //Affiche uniquement le billet avec une ID=1
"name=first-post"); //Affiche uniquement le billet nommé "first-post"
"page_id=7"); //Affiche uniquement la page avec une ID=7
"pagename=about"); //Affiche uniquement la page nommée "about"
 

Ici on pourrait se demander l'intérêt de n'afficher qu'un seul billet ou page ? Et bien c'est simple, de cette façon vous pouvez attribuer le contenu d'un encart de votre site à une page ou un billet (comme sur l'accueil de webinventif, le petit message de bienvenue est en fait un page unique). Ou alors pour simplement mettre en évidence un billet particulier.

Choisir le nombre de billets à afficher

span class="st0">"showposts=10"); //Affiche uniquement les 10 premiers billets

Choisir la façon de trier les billets, et choisir le sens de tri

span class="st0">"orderby=post_date&order=desc");//Tri les billets par date. Prend aussi "category", "title", "author", "name". Ici le sens est descendant, pour ascendant il faut mettre order=asc, qui est la valeur par défaut

Commencer l'affichage en excluant un certain nombre des premiers billets

span class="st0">"offset=10");//On exclu les 10 premiers billets demandés

Afficher uniquement les billets postés à un moment précis

span class="st0">"hour=01"); //Afficher uniquement les billets qui ont été publiés pendant l'heure 1
"minute=30"); //Afficher uniquement les billets qui ont été publiés pendant la 30ème minute (*:30)
"second=07"); //Afficher uniquement les billets qui ont été publiés pendant la 7ème seconde (*:*07)
"day=1"); //Afficher uniquement les billets qui ont été publiés pendant le 1er jour de la semaine (1)
"monthnum=2"); //Afficher uniquement les billets qui ont été publiés pendant le 2ème mois (2)
"year=2005"); //Afficher uniquement les billets qui ont été publiés pendant l'année 2005

Bon là j'avoue que seules l'année et le mois peuvent être intéressant, le reste ne servira quasiment jamais.

Choisir le nombre de billets par page

span class="st0">"posts_per_page=10"); //Affiche 10 billets par page

Cumuler les paramètres

span class="st0">"cat=-1,-2,-3&page_id=7&tag=google,yahoo"); //On affiche les billets qui ne sont pas dans les catégories 1, 2, 3 ... on inclus d'office la page avec une Id=7 ... on selectionne uniquement ceux qui ont le tag "google ou yahoo

Voilà, pour cumuler il suffit donc de lier les paramètre avec une esperluette "&"

Conclusions

Il faut aussi savoir que vous pouvez très bien cumuler les boucles sur votre page d'accueil ! Ainsi vous pouvez afficher plusieurs listes de billets avec des paramètres de sélection très différents. C'est mon cas sur webinventif, la page d'accueil comporte 5 boucles différentes 😉

Edit: Pour garder votre pagination intact, il faut rajouter le paramètre $query_string à la requête ...

span class="st0">"$query_string&cat=-4")

(Merci Christèle)

Inspiré de l'article de Andrés Nieto Porras, que j'ai traduit, détaillé et complété ...

-----

Articles relatifs