Je viens de tomber sur un article très intéressant du Blog Herald qui explique comment fonctionne une condition importante du loop Wordpress, la “query_posts”.
On la retrouve très souvent dans la sidebar car c’est elle qui va permettre l’affichage des derniers articles, ou encore d’afficher les asides. Finalement, comprendre l’utilisation de la “query_posts” va vous permettre de customiser votre sidebar sans avoir à aller installer un plugin supplémentaire. L’exemple utilisé par Nathan Rice est celui qui va vous permettre d’afficher certains de vos articles uniquement dans la sidebar, comme les Asides. Pour cela, vous allez utiliser la requête suivante:
1 | <?php query_posts('cat=1'); ?> |
En plaçant cette requête avant le loop Wordpress, vous n’afficherez que les articles en provenance de la catégorie 1. Vous pouvez bien entendu choisir n’importe quelle catégorie !
Vous pouvez également utiliser directement le nom de la catégorie:
1 | <?php query_posts('category_name=Sidenotes'); ?> |
Vous pouvez également utiliser cette query ailleurs que dans la sidebar, comme par exemple dans le contenu. Vous pouvez par exemple décider d’exclure une catégorie des billets qui seront affichés sur la homepage. Pour cela vous devrez utiliser la requête suivante:
1 | <?php query_posts('cat=-1'); ?> |
Le signe “moins” devant la catégorie signifie qu’elle ne sera pas prise en compte dans l’affichage des articles. Vous pouvez également décider de n’afficher qu’un article particulier. Pour cela, vous allez utiliser l’ID de l’article, le numéro que lui donne la variable de la base de donnée. Par exemple, admettons ici que l’on ne veut afficher que l’article avec l’ID n°6. On va alors insérer la requête suivante:
1 | <?php query_posts('p=6'); ?> |
Idem, si vous ne voulez affichez que le contenu d’une certaine page, vous remplacerez le ‘p=6′ par ‘page_id=6′, 6 étant le numéro de la page affichée.
Voici quelques exemples de paramètres utilisables par la “query_posts” (fournis par le codex Wordpress):
Catégories:
- cat=1: Va afficher les articles de la catégorie 1,
- cat=-1: Ne va pas afficher les articles de la catégorie 1,
- category_name=x: va afficher les articles de la catégorie x,
Auteurs:
- author_name=Fran6: Va afficher les articles de Fran6
- author=1: Va afficher les articles de l’auteur avec l’ID n°1
Articles et pages:
- p=1: Va afficher l’article avec l’ID n°1,
- name=meilleurs-themes-wordpress: Va afficher l’article intitulé “Meilleurs thèmes Wordpress” dont le format de l’URL reprend les termes: http://monsite.com/2007/06/05/meilleurs-themes-wordpress.
- page_id=1: Va afficher les articles de la page 1,
- pagename=a-propos: Va afficher le contenu de la page “A propos”,
- showposts=3: Ne va afficher que 3 billets sur la page,
- order=ASC: Affichera les billets dans l’ordre chronologique (DESC dans l’ordre inverse, c’est-Ã -dire le dernier en premier),
Un très bon exemple fourni par le codex Wordpress est le suivant:
Si on regarde bien la hiérarchie des templates, on remarque que c’est le template home.php qui est exécuté en premier. Ca veut dire que si vous créez un template home.php et que vous lui mettiez une “query_posts” pour afficher une page particulière, celle-ci deviendra votre page de garde, et qui ne sera pas une page avec des articles du blog. Et comme le dit si bien le codex, tout ça sans avoir besoin d’un plugin !!
Prenons un exemple pour faire concret. Vous voulez que les visiteurs arrivent sur une page “statique” de présentation quand ils viennent sur votre blog. Votre blog devient un “site” en quelque sorte. Admettons que cette page porte l’ID n°5. Vous allez donc créer une home.php avec le contenu que vous souhaitez MAIS SURTOUT avec le loop Wordpress. Avant ce loop, vous allez ajouter la requête suivante:
1 | <?php query_posts('page_id=5'); ?> |
et la page affichée à l’ouverture de l’URL de votre blog sera la page 5. Sympa non ?? Je trouve que c’est ce genre de connaissance qui rend la customisation de votre blog très intéressante, plutôt que d’utiliser des plugins en long et en large !
Paramètres de temps:
- hour=
- minute=
- second=
- day=
- monthnum=
- year=
Là , peut-être pas la peine de tout traduire non plus, hein ?
Alors, c’est bien joli toutes ces combinaisons, mais comment les lier entre elles ? Et bien tout simplement en utilisant le signe “&”. Prenons un exemple: si je veux afficher les 4 derniers articles du blog dans la sidebar, je vais utiliser 2 paramètres (order=DESC et showpost=4) à travers la requête suivante:
1 | <?php query_posts('order=DESC&showpost=4'); ?> |
De quoi s’amuser pour un moment non? On peut vraiment faire pas mal de choses avec cette requête, que ce soit pour paramétrer le contenu ou la sidebar. A vous de trouvez ce qui vous convient le mieux !!







Dommage qu’il y ait un bug entre Simple Taggin et cette fonction :(.
bonjour
heu…. moi j’y arrive pas que ce soit avec le theme classic ou celui que j’utilise, j’insère mais ça m’affiche pas. Donc j’ai trouvé de koi m’occuper aujourd’hui. pour ma part je prefère afficher les articles sur le coté plutot que les catégories. et tant qu ‘a faire je vais essayer de modifier l’apparence de mon wordpress.
donc, Françis, si tu as du temps a perdre et si tu as MSN…. je veux bien un petit coup de main
Yazerty > Quel genre de problème avec ST ? Faudrait voir ça avec Amaury qui s’occupe du plugin… Tiens-moi au courant !
Loutte > Je n’ai malheureusement pas trop le temps pour chatter mais tu peux toujours m’envoyer tes questions par email ! Sinon, concernant la requête, il faut bien la placer avant le loop. Bon courage !!
Francis > AmO est au courant du problème (discuté sur le forum de WordPress France : http://www.wordpress-fr.net/su.....ir-marcher ; et j’ai mis un ticket dans le trac du plugin). Pour le moment je me débrouille en utilisant un plugin d’affichage des derniers posts. Bizarrement ça marche (l’informatique tout ça ^^…)…
Merci d’avoir rappellé l’existance de query_post qui peut éviter pas mal de bidouilles ou de plugin. En plus, je ne connaissais pas blogherald… shame on me
Salut br1o,
Effectivement blog herald est assez sympa. Je ne le connais pas depuis longtemps non plus remarque …
On la trouve où cette query_post ?!
Djoul > C’est une requête, à toi de l’écrire à l’endroit où tu veux qu’elle soit utilisée !
Hello,
je cherche désepérément à faire la chose suivante:
afficher les articles d’une catégorie donnée ET publiés au cours des 7 derniers jours.
(en d’autres termes l’user clique sur une categorie et ne s’affichent que les articles publiés au cours des 7 derniers jours dans cette catégorie.)
je pense que ça doit être possible avec query_posts mais là , je sèche, grave.
merci de ton aide, si tu as une idée, et merci pour ce blog que je découvre et qui est une vraie mine
Bob > le bonheur est dans le codex : http://codex.wordpress.org/Dis.....lect_Query
yesssss ! merci beaucoup ! le bonheur est (bien caché) dans le codex
Effectivement Bob, tout est super bien expliqué dans le codex Wordpress, ce qui est souvent le cas d’ailleurs. Tu devrais trouver ton bonheur !
… et merci pour les compliments concernant le blog !
Francis,
quelle est la difference enntre ces 2 requetes?
comment faire pour afficher que le titre et 1 photo des articles d’une categorie?
# cat=1: Va afficher les articles de la catégorie 1,
# category_name=x: va afficher les articles de la catégorie x,
farid > la différence c’est que la première fonctionne sur le numéro de la catégorie et le deuxième sur le nom… Sinon, pour ton besoin, il faut modifier le loop pour retirer le contenu et ajouter un custom field pour ajouter ta photo !
salut Fran6art !
Je voulais savoir si il était possible d’avoir une requête qui permet d’afficher les articles du mois précédent ? (ex: liste des billet du mois de mai 2008).
requête actuelle :
have_posts()) : $recent->the_post();?>
merci pour toutes tes connaissances partagées !
mh > Oui, il faut utiliser “monthnum=”
salut
oui mais je mets quoi comme valeur : “monthnum=—-????—–” ?
j’ai essayé avec “last” met rien
mh > Ce n’est pas possible de cette manière. WP ne fonctionne pas comme ça. Tu ne peux que lui donner une info précise du style, mois X… Je sais c’est con mais c’est comme ça !!
Sinon, faut faire marcher un plugin d’archives qui pourrait peut-être te faire ça…
re salut
zut bon je vais m’en passer
merci !
Pour avoir les articles du mois, il est peut-être possible d’utiliser quelque chose du genre : grosso modo : si mois-en-cours == janvier (avec les fonction datetime en php) alors monthnum=1 ; elseif mois-en-cours == fevrier alors… etc…
A tester, tant est que j’ai bien compris la question
Bruno > Le truc c’est comment dire que c’est le mois en cours… Et surtout afficher les articles du mois précédent en fonction de cette hypothèse… En tout cas, l’idée est là !
salut
je ne suis encore qu’un novice dans les langages web…
si vous avez un plugin permet d’afficher un contenu bien précis selon la temps en fonction de la date actuelle (au final : afficher les a
Ce matin, petit check de mon blog et hop, tout est dans l’odre chronologie (et non pas inversé comme logiquement), tu aurais une idée du pourquoi du comment? J’ai pas touché au code depuis un ptit temps et là soudainement, ca change? une idée pour résoudre ce problème? Thanks
Salut,
ton post est exactement ce que je cherchais mais malheureusement, quand j’ajoute la requete ca m’inverse bien les post \o/ mais les liens pour ajouter des commentaires et pour avoir le post en une page ne réagissent plus Oo
Y’a t il une solution a ca
Merci
soyphrenn > Sûrement un souci de code quelque part… Refais la manip en arrière pour voir si ça se produit toujours…
désolé de t’embêter une nouvelle fois, mais sur cette page les lignes de codes n’apparraissent pas, elles ne s’affichent pas à l’écran
jep > C’est bon j’ai tout remis en ordre !!