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.






Très intéressant cette classe ! Je n’avais pas saisi son intérêt ! Merci pour les exemples concrets !!
Merci très intéressant
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
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 !!
@quentin
et ensuite quand tu fais la loop WordPress tu utilise bien sûr ton objet.
C’est tout à fait ce qu’il faut faire.
Dans ton objet WP_Query tu passe ton tableau comme tu l’as dis si bien
Perso j’utilise des CPT dans des boucles WordPress et ça fonctionne parfaitement
(Fais attention d’avoir le bon nom de ton custom post type, quand tu crée ton CTP via la méthode assure toi d’avoir en premier paramètre le nom de ton custom post type qui sera utilisé dans les boucles)
register_post_type(‘ctp1′, $argsCPT1);
register_post_type(‘ctp2′, $argsCPT2);
Exemple :
array(‘cpt1′, ‘cpt2′)
);
$ctp = new WP_Query($args);
if($ctp->have_posts()): while($ctp->have_posts()): $ctp->the_post();
the_title();
endwhile; endif;
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
@Quentin : Est-ce que tu as bien un wp_reset_query() à la fin de la boucle ?
@Jonathan: oui oui..
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.
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
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