- Statut : non résolu
- Ce sujet contient 72 réponses, 15 participants et a été mis à jour pour la dernière fois par squalleric, le il y a 13 années et 7 mois.
-
AuteurMessages
-
8 septembre 2008 à 17 h 24 min #462839
Parce que y’en a marre de devoir présenter M. Query post un topic sur deux, voici un topic dédié à son utilisation.
Avec la fonction Query Post on va pouvoir faire une tonne de choses ! C’est notamment très utile pour contrôler le nombre de billets à afficher, l’ordre de tri des billets, afficher les billets que de certaines catégories… Et plein d’autres choses ! Très utile pour la page d’index, de catégories, archives.
On va donc voir simplement comment procéder pour effectuer chacune de ces tâches. Ce topic est tout public, débutant comme confirmé, vous êtes les bienvenus 🍺.
1. Faut pas looper le site !
La loop [en] ou la boucle en français est la fonction qui permet d’afficher les articles, elle commence généralement ainsi :
<?php if (have_posts()) : ?><?php while (have_posts()) : the_post(); ?>
La fonction Query Post qui va nous permettre de personnaliser l’affichage des billets se glisse entre if have posts et while have post : the post (ne m’en veuillez pas les barbus) de telle manière :
<?php if (have_posts()) : ?>
<?php query_posts(''); ?>
<?php while (have_posts()) : the_post(); ?>C’est bon tout le monde suit ? On a donc introduit la fonction Query Post qui pour le moment ne comporte aucune consigne, cela ne va donc rien affecter.
2. La personnalisation ça a du bon
Maintenant que tout le monde sait de quoi on parle, on va passer aux choses sérieuses.
2.1 Définir le nombre de billets à afficher
<?php if (have_posts()) : ?>
<?php query_posts('showposts=10');
// on affiche 12 billets max, les autres paramètres restent par défaut
?>
<?php while (have_posts()) : the_post(); ?>Applications possibles : utile si on ne veut pas afficher le même nombre d’article sur notre index que sur nos pages d’archives par exemple.
Maintenant que vous avez compris comment fonctionne la loop et comment l’utiliser, on va être plus concis 😉.
2.2 Définir la catégorie d’où seront affichés les billets
query_posts(« cat=1 »); //affiche les billets classés dans la catégorie dont l’ID est 1
query_posts(« cat=-1 »); //affiche les billets classés dans toutes les catégories mis à part celle dont l’ID est 1
query_posts(« cat=1,2,3 »); //affiche les billets classés dans les catégories dont les IDs sont les suivants : 1, 2, 3
query_posts(« tag=tata-simone »); //affiche les billets ayant le tag « tata-simone »
query_posts(« tag=tata-simone,tonton-andre »); //affiche les billets ayant le tag « tata-simone » ou « tonton-andre »
query_posts(« tag=tata-simone+tonton-andre »); //affiche les billets ayant le tag « tata-simone » et « tonton-andre » (uniquement si ils comportent les 2)Applications possibles : peut servir pour afficher les billets d’une seule catégorie dans la sidebar, faire un encart sur la page d’accueil…
2.3 Définir le mode de tri des billets
query_posts(« order=desc »);//tri les billets par date du plus récent au plus vieux
query_posts(« order=asc »);//tri les billets par date du plus vieux au plus récent
query_posts(« orderby=author »);//tri les billets par auteurs
query_posts(« orderby=category »);//tri les billets par catégories
query_posts(« orderby=category »);//tri les billets par modification
query_posts(« orderby=ID »);//tri les billets par IDApplications possibles : dans un site où l’on ne souhaite pas mettre en avant la fraîcheur de l’information.
2.4 Afficher un billet particulier, une page particulière
query_posts(‘p=1’); //affiche le billet dont l’ID est 1
query_posts(‘page_id=1’); //affiche la page dont l’ID est 1
query_posts(‘pagename=tata-simone’); //affiche la page dont le titre est « tata simone »Applications possibles : mis en valeur dans un but quelconque d’un post précis.
2.5 Exclure les x premiers billets
query_posts(« offset=10 »); //affiche les billets à partir du 11ème
Applications possibles : sur la page d’accueil (ou les pages d’archives), une fonction très intéressante qui permet de linker des posts assez vieux sous une mis en forme différente.
2.6 Sélectionner une période particulière (dans le temps)
query_posts(« hour=01 »); //affiche les billets publiés lors de l’heure 1
query_posts(« minute=1 »); //affiche les billets publiés lors de la première minute d’une heure
query_posts(« second=1 »); //affiche les billets publiés lors de la première seconde d’une minute
query_posts(« day=1 »); //affiche les billets publiés le premier jour du mois
query_posts(« monthnum=1 »); //affiche les billets publiés lors du premier mois d’une année
query_posts(« year=2000 »); //affiche les billets publiés lors de l’année 2000Applications possibles : pour faire un retour dans le passé.
3. A deux c’est mieux
Mais on peut également cumuler ces paramètres !
Exemple, si je souhaite afficher 8 billets de la catégorie ayant l’ID 5 et 7″ :
query_posts(« showposts=8&cat=5,7 »);
Tadam !
Pareil, si on souhaite afficher 3 billets du tag « tata-simone » en trillant les billets par auteur :
query_posts(« showposts=3&tag=tata-simone&orderby=author »);
Vous l’avez donc surement compris (si non, c’est pas la peine de faire des tests de QI), pour cumuler les paramètres il faut utiliser ‘&’.
4. Voler de ses propres ailes
Maintenant c’est à vous de jouer. Toutefois sachez qu’il existe encore d’autres paramètres que vous pouvez consulter sur la page du codex de WordPress.org [en] dédiée à M. Query Post.
Je vous invite aussi à consulter la page dédiée à la démonstration de l’utilisation de la boucle [en] qui vous permettra de revoir les bases de la loop.
PS : pourquoi pas « post-iter » ce topic (quasiment d’intérêt public) ?
10 septembre 2008 à 12 h 11 min #644824le probleme de query post c’est que ça marche jamais avec la navigation.
Par exemple, si je veux afficher un seul article en page d’accueil et 10 dans les pages de categorie.
Je configure wordpress pour qu’il affiche 10 articles et sur index.php j’utilise query_post pour qu’il affiche un seul article.
Tu peux essayer, ça marche très bien. Sauf que la navigation vers les entrées précédentes ne marchent pas sur la page d’accueil.J’avais déjà signalé ce type de problème et depuis j’ai jamais trouvé de solution.
L’année derniere si je me souviens bien, j’avais utilisé query_post pour afficher seulement certaines categories et en extraire d’autres dans les singe.php.
ça marchait très bien sauf que là encore, ça n’était pas pris en compte dans le systeme de navig « article precedent article suivant »Est-ce que tu sais comment remédier à ce type de problèmes ?
A+
10 septembre 2008 à 12 h 16 min #644825AnonymeInactifPadawan WordPress96 contributionsOui il faut utiliser $query_string en l’insérant de la manière suivante :
query_posts(« $query_string »)
query_posts(« $query_string&showposts=1 ») //permet de lister un seul article même sur les pages de paginations10 septembre 2008 à 12 h 26 min #644826Merci de ta réponse et de ta rapidité 🙂
Chez moi ça marche pas. ça vient surement de moi, je ne suis pas un pro du php. ça affiche bien un unique billet en page d’accueil mais quand je clique sur « précédent » ça affiche une erreur 404
Voici le code de mon index.php (rien d’extraordinaire, c’est le kubrik de base)
<div id="content" class="narrowcolumn">
<div class="post" id="post-« >
<h2><a href=" » rel= »bookmark » title= » »></a></h2>
<small> par </small>
<div class="entry">
</div>
<p class="postmetadata"><?php the_tags(__('Tags:', 'kubrick') . ' ', ', ', '<br />‘); ?> | </p>
</div>
<div class="navigation">
<div class="alignleft"></div>
<div class="alignright"></div>
</div>
<h2 class="center"></h2>
<p class="center"></p>
</div>Qu’en penses-tu ?
10 septembre 2008 à 15 h 23 min #644827AnonymeInactifPadawan WordPress96 contributionsTu as mal compris ce que j’ai dit (ou j’ai mal expliqué).
Tu ne dois pas répéter query_string.
Supprime la ligne :
Et laisse simplement :
10 septembre 2008 à 15 h 29 min #644828N’étant pas sûr d’avoir compris, j’avais essayé aussi sans la 1ere ligne. ça ne fonctionne pas non plus.
regarde : exemple
si tu cliques pour voir l’article suivant : erreur 404ça marche quand tu le fais chez toi ?
10 septembre 2008 à 15 h 43 min #644829AnonymeInactifPadawan WordPress96 contributionsEssaye ça :
Si cela ne fonctionne pas je ferai des tests, j’utilise quasiment jamais la pagination WordPress alors c’est pas mon fort mais on va finir par trouver 😉.
10 septembre 2008 à 15 h 57 min #644830nan, ça marche pas non plus
13 septembre 2008 à 12 h 16 min #644831je suis toujours preneur d’une solution 🙂)
25 février 2009 à 12 h 56 min #644832vui…
ou esqu’on « colle » ces ligne?
on ma parlé de « template » mais bon….je découvre
merci…
2 mai 2009 à 11 h 24 min #644833Bonjour,
j’aimerais exclure une catégorie et ses sous-catégories de du menu se trouvant dans le header.
Je vois qu’il me faut utilisé ce code:query_posts(« cat=-1 »);
Mais je ne sais pas dans quel fichier l’insérer. Je suis allé dans le dossier de mon thème ( Guzel ) voir dans le header mais je n’ai pas trouvé la boucle.
Dans quel fichier dois-je insérer le code? Si vous avez besoin de renseignements supplémentaires sur mon thème pour m’aider je suis totalement disposé à vous les fournir.
Merci d’avance pour l’aide que vous m’apporterez,
Pcn
2 mai 2009 à 11 h 45 min #644834Non en fait tu n’utilises pas query_post dans ce cas.
Je viens de regarder dans le thème que tu utilises : dans le header tu trouves cette ligne :
C’est cette ligne qui affiche la liste des catégories. Tu peux en savoir plus sur l’utilisation de wp_list_categories en allant dans le codex
Tu y apprendras notamment comment exclure une categorie de la liste en utilisant le parametre « exclude ».Par exemple ici, si tu voulais exclure la catégorie dont l’ID est 18 tu devrais rectifier ta ligne de code ainsi :
Dis-moi si tu as réussi ou si tu as des problèmes à le faire.
2 mai 2009 à 14 h 33 min #644835Ca fonctionne! Merci beaucoup!
As-tu également une idée de la manière à supprimer la catégorie du widget « Catégories »?
2 mai 2009 à 14 h 39 min #644836tu pourrais être + précis ? ^^
Et avant de poser cette question, tu as regardé sur le lien que je t’ai donné ? http://codex.wordpress.org/Template_Tags/wp_list_categories
3 mai 2009 à 11 h 31 min #644837En fait je veux exclure la catégorie du widget « Catégories » se trouvant dans la sidebar dynamique (modifiable dans wp-admin => Apparence => Widgets).
Je vois dans le codex que je dois utiliser
,
); ?>Maintenant la question est: dans quel fichier dois-je introduire ceci?
Merci,
Pcn
-
AuteurMessages
- Le forum ‘Utilisation spécifique de WordPress’ est fermé à de nouveaux sujets et réponses.