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.
query_posts("....");
while (have_posts()) : the_post();
...
endwhile;
?>
Donc on place query_posts() juste avant le while.
Exclure ou afficher uniquement les billets d'une ou plusieurs catégories
query_posts("cat=-4"); //Affiche tout sauf les billets de la catégorie avec une ID=4
query_posts("category_name=Categorie1"); //Affiche uniquement les billets de la catégorie "Categorie1"
query_posts("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
query_posts("tag=google,yahoo"); //Affiche uniquement les billets qui ont le tag "Google" OU ""yahoo"
query_posts("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
query_posts("author=2"); //Affiche uniquement les billets de l'auteur avec une ID=2
query_posts("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
query_posts("name=first-post"); //Affiche uniquement le billet nommé "first-post"
query_posts("page_id=7"); //Affiche uniquement la page avec une ID=7
query_posts("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
Choisir la façon de trier les billets, et choisir le sens de tri
Commencer l'affichage en excluant un certain nombre des premiers billets
Afficher uniquement les billets postés à un moment précis
query_posts("minute=30"); //Afficher uniquement les billets qui ont été publiés pendant la 30ème minute (*:30)
query_posts("second=07"); //Afficher uniquement les billets qui ont été publiés pendant la 7ème seconde (*:*07)
query_posts("day=1"); //Afficher uniquement les billets qui ont été publiés pendant le 1er jour de la semaine (1)
query_posts("monthnum=2"); //Afficher uniquement les billets qui ont été publiés pendant le 2ème mois (2)
query_posts("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
Cumuler les paramètres
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 ...
(Merci Christèle)
Inspiré de l'article de Andrés Nieto Porras, que j'ai traduit, détaillé et complété ...
Guide pour mieux gérer vos emails via gmail (multicompte, redirection, ...)
Comment réussir vos concours sur vos blogs ?
Brève Wordpress: 40 liens, thèmes, plugins et astuces en tout genre !
Ajouter un lien pour envoyer la page par e-mail
bonjour,
malgré tout ce que je viens d elire, je n’ai trouvé aucune solution à mon problème : certaines de mes infos, « développées », sont publiées sur la homepage, normalement. Mais je voudrais que certaines infos « brèves », n’apparaissent sur la homepage que dans le sidebar : soit en créant une catégorie « brèves », soit en utilisant seulement l’affichage (proposé par mon thème) des 10 ou 15 derniers articles (dans ces cas les ifos normales seraient mélangées aux brèves, ce qui n’est pas non plus un problème).
Le souci : j’ai trouvé un petit plugin qui me permet de filtrer, de choisir si un post doit apparaître ou pas sur la homepage. Jusque là pas de problème, seulement si je choisis de filtrer, il n’apparaît pas non plus dans la sidebar (en clair, personne ne sait qu’il existe, à moins d’aller butiner dans la catégorie, mais la majorité se contente de voir les dernières infos depuis la homepage). Comment puis-je faire pour éviter l’affichage sur la colonne principale de la homepage, et créer un affichage de ces posts « filtrés » dansla sidebar ? Merci beaucoup de m’aider
Bonjour,
Bravo pour cet article bien détaillé.
Perso, pour réaliser un site de petites annonces, j’aimerais savoir comment afficher les catégories principales en page d’accueil sans leurs sous-catégories et uniquement les sous catégories de la catégorie cliquée ensuite et enfin les article de cette dernière.
Merci pour l’aide précieuse que vous pourrez m’apporter.
Hello, merci pour ce post bien détaillé.
Cela fait quelques jours que je tourne en rond autour d’un problème de « sorting ». Peut-être je me dirige vers la mauvais fonction.
En tout cas je souhaiterais laisser la possiblité aux uitlisateur de mon site de pouvoir changer l’affichage du nombre d’article (par ex avec : query_posts( $query_string . ‘&posts_per_page=’ …) via un dropdown de sélection (1632…)
Avez-vous une idée?
Merci d’avance.
Bonjour
J’ai essayer cela, pour avoir 2 catégories sur une page
et aussi
ça ne fontionne pas