Francis Chouquet Lettering & Web Design

WordPress: « query_posts », la requête à tout faire !

0

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 ? :D

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 !!

Fran6

76 Commentaires

  • Oniris

    Merci pour ce tuto. Je cherche à l’utiliser pour afficher un article en dehors du contenu de ma page. Comment faire ???

  • Salut Fran6, sympa tes posts (vraiment on en apprend bcp sur le monde de WordPress).
    Le post sur la query_post est super, cependant je souhaite vérifier avec toi si il est possible d’afficher plusieurs page sur la page d’index? à peu prêt comme sur mon site ou celui de kloobik.org, je m’explique un peu plus:
    Présenter chaque page avec son titre sa vignette, et son excerpt.

  • Bonjour, j ai des catégories et sous catégories mais le soucis c est que dès que l on clique sur une, toutes les autres (images des autres cat) apparaissent aussi… puis seulement les articles… et comme j ai bcp de cat ça fait pas très beau :( comment faire pour que les autres n apparaissent que sur le coté gauche? merci d avance!!

  • Malupeca

    Merci beaucoup pour ce (ces) tutoriel très clairement expliqué pour les néophites.

  • Djof

    Bonjour , c’est cool , ça marche super bien , mais si je veux insérer 2 pages dans une : impossible
    Ca prend toujours le dernier query_posts même si on imbrique ds la ().
    J’ai essayé pas mal de solutions , mais je crois qu’il n’y en pas … ?

  • Djof essai après ton while. Logiquement ça doit marcher.

  • Djof

    Oui , ça semble logique , j’y avait pensé par la suite , je vais essayer aujourd’hui. Et sinon pour mettre 2 catégories dans une page ? Ah AH ? Une idée ?

    un Grand Merci !!

  • Djof

    Comment mettre un « query post » à la suite d’un while … Rrrrrr.. ça marche po.
    si qlq à une idée d’ou placer ça , ça serait super :
    En gros aprés la page générée par le while j’aimerai mettre les articles d’une catégorie ou une autre page.

    voilà le code :



    <div class="post" id="post-« >

    <!– –>


  • Salut ! et merci pour ton tuto et site en général

    Ton tuto marche parfaitement MAIS !!

    En fait j’ai 3 articles que je souhaite mettre constamment en page d’accueil. En gros dans wordpress j’ai choisit : mettre en avant

    Sachant que je ne veux mettre aucun autre article en page principale… Comment faire ?

    Car visiblement ce bout de code bug dès que je met des articles en avant : par exemple si je met 1 article en avant. le site m’affiche 3 sites
    Par contre si je met 2 articles en avant, ça affiche 4 articles
    si je met 3 articles en avant ça affiche 5 articles…

    en clair j’ai songé a mettre… showposts=0

    Sauf que pour le coup ça m’affiche le nombre maximal, quel que soit le nombre d’article mis en avant.

    J’en déduit qu’après ma boucle vérifie si j’ai pas showposts=0 et du coup ça annule…

    J’ai fait un peut de C, mais dans le php je suis un peut perdu pour arriver a neutraliser la condition 0 …

    Je pense que je suis pas loin du but mais je cale !

    Tu peux m’aider ? ou m’orienter ?

    Si tu veux je peux t’envoyer un mail

  • Francis tu es mon DIEU !!
    Je voulais juste te poster un GRAND GROS merci ! Je suis sur un projet de création d’un site en wordpress de A à Z. T’es nombreux tuto (création d’un design sous wordress par exemple) m’ont sauvé de la calvitie à trop de reprises pour ne pas au moins te laisser un merci. Je n’avais que mes connaissance d’infographiste avec mes petites bases de web pour ça, mais grâce à toi je me débrouille assez bien pour répondre aux exigences de mes clients. Et tu enrichis mes compétences :D !!!! Merci merci merci !!!!

  • rudddy

    Salut Francis et merci pour tout.

    Moi je sais pas mais ça marche pas !

    Voilà le contenu de ma page :

    (c’est uniquement une image, cela dit la page s’affiche correctement)

    un simple ne m’affiche rien.

    y a t’il un quelconque include à faire en haut de la page ?

    Merci

  • David

    Bonjour Francis !

    depuis que j’ai découvert votre site j’en apprend presque chaque jour.
    j’ai toujours réussi à me débrouiller seul mais la je bloque sur un sujet un peu chiant.

    J’ai dans mon menu mes catégories parents et en sous menu les sous catégories associées. Jusque là tout va bien.
    J’ai réussi à adapter ma page category.php afin d’afficher seulement les articles de la catégorie en question mais, c’est la que les soucis commencent, je n’affiche pas les articles des sous-catégories associées. Pour voir les articles des sous catégories je dois passer par le menu et cliquer sur la sous-catégorie.

    Si vous avez une idée pour résoudre ce problème, je suis preneur !

    voici un bout de mon code :

    cat_name;
    $macategorie = get_cat_id($macategorietemp);
    query_posts(‘cat=’.$macategorie);

    while (have_posts()) : the_post(); ?>
    <div class="post" id="post-« >

    <a href=" » title= » »>

    par |
    Catégorie: |

  • David

    le code :

    cat_name;
    $macategorie = get_cat_id($macategorietemp);
    query_posts(‘cat=’.$macategorie);
    while (have_posts()) : the_post(); ?>
    <div class="post" id="post-« >

    <a href=" » title= » »>

    par |
    Catégorie: |

  • klintcruzloancompany@yahoo.com

    emaill nous sur klintcruzloancompany@yahoo.com

    KLINT CRUZ Loan Company
    103 normale Illinois USA
    Prêt à l’entreprise EXPERTS210,
    Maison de prêt rapide.

    Cher client estimé,

    J’ai reçu votre mail et je tiens à vous faire savoir que vous avez besoin pour
    Remplissez le formulaire de demande de prêt ci-dessous afin que nous puissions commencer à
    le ok de transfert

    Veuillez remplir le formulaire de demande de prêt ci-dessous;

    Nom complet:
    Adresse de résidence:
    pays:
    Numéro de téléphone / portable:
    Date de naissance (aaaa-mm-dd):
    profession:
    sexe:
    Montant du prêt nécessaire:
    Time Durée:
    Objet du prêt:

    Je déclare par la présente ____________________ que l’information fournie dans
    cette demande est véridique et correcte. que tout
    fausse déclaration intentionnelle ou par négligence de ces informations
    contenus dans cette demande peut entraîner une responsabilité civile,

    y compris les dommages-intérêts à toute personne qui peut subir aucune perte due
    au recours à une fausse déclaration que j’ai faite.

    Envoyer Cordialement

  • Arnaud

    Bonjour,
    Bel article qui va peut-être à l’encontre de se que préconise le codex WordPress, qui dit:
     » query_posts also uses WP_Query, but is not recommended because it directly alters the main loop by changing the variables of the global variable $wp_query. get_posts, on the other hand, simply references a new WP_Query object, and therefore does not affect or alter the main loop.  »
    Toutefois, c’est grâce à cet article que ma solution se profile, merci 1000x!


6 + = 13

Success, your comment is awaiting moderation.