Guides WordPress

Personnaliser les requêtes avec WP_Query

Ce guide passe en revue la class WP_Query de WordPress. Nous allons voir comment personnaliser nos requêtes grâce à cette class.

S'inscrire à la newsletter

Si vous voulez afficher sur votre index.php, single.php ou un autre fichier un contenu différent de ce que fait la boucle WordPress de base, il suffit d’utiliser WP_Query.

WP_Query est une class qui permet de créer des requêtes personnalisées pour récupérer vos posts selon des critères définis via le paramètre du constructeur de cette classe. Pour utiliser cette requête il faut la stocker dans une variable et utiliser cet objet dans la boucle WordPress :

<?php
$query = new WP_Query($args); 
if($query->have_posts()) : while($query->have_posts()) : $query->the_post();
?>
 // Votre contenu ici
<?php endwhile;endif; ?>

Cette class est paramétrable à souhait, beaucoup de possibilité s’offre à vous, voici quelques exemples d’utilisation.

Récupérer la totalité des articles

<?php $query = new WP_Query(array('post_type' => 'post')) ; ?>

Récupérer tous les articles et toutes les pages

<?php $query = new WP_Query(array('post_type' => array('post', 'page'))); ?>

Récupérer les 4 derniers articles

<?php $query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 4)) ; ?>

Récupérer les 4 derniers articles d’une ou plusieurs catégories

<?php $query = new WP_Query(array('posts_per_page' => 4, 'category_name' => 'slug-de-votre-categorie')) ; ?>

Vous pouvez aussi utiliser un ou plusieurs ID ou même le slug des catégories à récupérer.

$query = new WP_Query('posts_per_page' => 4, 'cat=2,6,17,38');
$query = new WP_Query('posts_per_page' => 4, 'category_name=actualites,film,musique');

Récupérer le custom post type « film » trié par titre dans l’ordre décroissant

<?php $query = new WP_Query(array('post_type' => 'film', 'orderby' => 'title', 'order' => 'DESC')); ?>

Récupérer la totalité des posts qui n’ont pas l’ID indiqué

<?php $query = new WP_Query(array('post__not_in' => array(2, 5, 12, 14, 20))); ?>

Récupérer la totalité des posts qui ont l’ID indiqué

<?php $query = new WP_Query(array('post__in' => array(2, 5, 12, 14, 20 ))); ?>

Pour plus d’informations et d’avantages de personnalisation sur la class WP_Query rendez-vous sur la page du codex.

11 commentaires
  1. vallsymachinant le

    Très intéressant cette classe ! Je n’avais pas saisi son intérêt ! Merci pour les exemples concrets !!

  2. medesko le

    Merci très intéressant

  3. Quentin le

    Merci pour ce petit tuto.
    J’ai une petite question..
    Logiquement si je fais ‘post_type’ => array(‘actualites’, ‘flashinfos’) » je devrais seulement avoir les articles de ces 2 customs pt ? Or j’ai tout (même les pages)..Alors que si je fais une requête avec juste « flashinfos » ou une avec juste « actualites », j’ai bien les bons articles…

    As-tu une idée d’où ca pourrait venir?

    Merci

  4. David du blog qui aide les commerçants. le

    C’est une bonne question QUENTIN, peut être faut il faire 1 requete à la fois afficher puis refaire une deuxieme boucle avec la 2ieme requete ? Le soucis c’est que cela affichera tous les contenus d’un postype puis tous de l’autre… à voir je veux bien tes retours !!

  5. Quentin le

    RTRANSAT :
    Justement, quand je passe le tableau que j’ai indiqué, il me ressort tous les articles et les pages du sites..et non les articles des 2 cpts.

    J’ai vérifié les « id » que j’ai indiqué lors de la création des cpts, il n’y a pas d’erreur, d’ailleurs ils marchent un par un..

    D’autre part, j’ai découvert que je faisais ‘post_type’=>’post’, j’avais également le même resultat, il ressort tous les articles de tous les cpt et toutes les pages..
    Je sais pas si c’est le cas chez vous?

    J’ai fais pas mal de recherches, et il y a plusieurs tutos pour selectionner les contenus de plusieurs ctp, donc ca doit être faisable..

    David, une solution que j’ai trouvé c’est de contourner le problème et d’utiliser get_posts, mais je continue de chercher…

    Si quelqu’un d’autre a une piste, je suis preneur :)

  6. Jonathan Buttigieg le

    @Quentin : Est-ce que tu as bien un wp_reset_query() à la fin de la boucle ? :)

  7. Quentin le

    @Jonathan: oui oui..

  8. Stephane Turquay le

    Une idée pour obtenir la liste des 4 derniers posts à partir d’un ID ?

    Exemple :
    J’ai 9 posts avec comme ID : 1, 2, 3, 4, … , 9.

    Je veux afficher uniquement les 4 derniers à partir du 6.

  9. maroua le

    Bonsoir , je vais essayé d’afficher tout mes catégories dans une page , donc j’ai mis dans ma page (template) , le code
    4, ‘category_name’ => ‘slug-de-votre-categorie’)) ; ?> mais sa fonction pas . svp aidez moi

  10. darknote le

    bonjour,
    on met où wp_reset_query() après endif ?
    et slug-de-votre-categorie, on le remplace par le nom de la catégorie voulue ?

    Désolé mais ce qui peut vous paraitre évidement, me donne un sentiment d’incertitude.
    et si on veut avoir « image à la une » on met quel code et où ?

    Merci

Poster un commentaire

Les champs obligatoires sont indiqués avec *

Ici, on utilise KeywordLuv. Entrez YourName@YourKeywords dans le formulaire "Pseudo" pour bénéficier des avantages SEO d'un mot-clef ciblé. Attention, tous les commentaires non-constructifs ne bénéficieront pas d'une ancre optimisée.

Prévenez moi de tous les nouveaux commentaires par email.

Ne plus afficher|Fermer
Suivez-nous sur Facebook !