Plus : personnaliser la boucle wordpress

Query_posts est une fonction qui permet de déterminer ce que wordpress doit aller chercher dans les contenus du site. Par défaut, c’est wordpress qui s’occupe de savoir ce qu’il doit afficher en fonction du contexte : les derniers posts dans la page d’entrée ou telle page ou article. query_posts permet d’imposer à Wordpress votre requête personnelle.

Précédent | 12/20 | Suivant

La syntaxe est simple : commençons par un exemple simple : afficher les contenus de la catégorie 1. On placera ce code devant la fameuse boucle Wordpress :

<?php query_posts('cat=1'); ?>

<?php while (have_posts()) : the_post(); ?>
 <!-- Ici on affiche ses contenus -->
<?php endwhile; ?>

Pour afficher un article particulier :

<?php query_posts('p=1'); ?>

et pour une page

<?php query_posts('page_id=6'); ?>

On peut associer plusieurs éléments dans une query, par exemple pour chercher des articles provenant des catégories 1, 2 et 3 :

<?php query_posts('cat=1,2,3'); ?>

ou enlever des catégories d’une recherche sur tous les articles

query_posts( 'cat=-1,-2,-3' );

On peut limiter le nombre de résultat.Le nombre de post par page est déterminé par les préférences de wordpress, mais on peut supplanter cette configuration :

<?php query_posts('cat=1&posts_per_page=5'); ?>

L’argument "-1" force à afficher tous les résultats :

<?php query_posts('cat=1&posts_per_page=-1'); ?>

Cas particulier : afficher une sélection d’articles

Pour afficher plusieurs articles choisis, on utilisera un array

<?php
       // on demande les articles 1, 4 et 8
       // dans l'ordre ascendant : le plus vieux au dessus
   $args = array(
       'post_type' => 'post',
       'post__in' => array(1,4,8),
       'order' => 'ASC'
   );
   // faire la demande
   query_posts($args);
   ?>

   <?php if(have_posts()) : ?>
   <?php while(have_posts()) : the_post(); ?>

   <?php the_title(); ?>
   <hr>

   <?php endwhile; ?>
   <?php endif; ?>

   <hr><hr>
   // revenir aux contenus standard de la boucle
   // les 10 derniers articles (par défaut)
   <?php wp_reset_query(); ?>

Cette méthode (ni aucune à ma connaissance) ne peut afficher les articles dans un ordre choisi : ici les articles sont affichés dans l’ordre ascendant, c’est à dire le plus vieux au dessus. L’ordre par défaut de Wordpress est desc, c’est à dire le plus récent au dessus. On peut donc changer manuellement la date des articles pour forcer l’affichage, ou choisir une méthode comme l’ordre alphabétique du titre par exemple :

$args = array(
           'post_type' => 'post',
           'post__in' => array(1,4,8),
           'orderby'=>'title',
           'order' => 'ASC'
       );

Voir l’article sur les query sur le site Wordpress

Afficher le contenu "normal" après une query personnalisée

A partir du moment ou on impose sa propre query (demande) à Wordpress, il perd la mémoire et ne se rappellera plus ce qu’il devait initialement afficher dans la page. Si j’utilise ma query au début de la page d’entrée du site, qui devait afficher les 5 derniers articles, j’aurais la surprise de voir que wordpress n’affiche plus ces contenus mais uniquement le contenu de ma query personnelle. Il a oublié ce qu’était le contexte de la page.
Pour parer à ça, on peut stocker la demande initiale, et lui rappeller une fois l’affichage personnel terminé.

Comme ça :

// on recopie la requete par defaut
<?php $temp_query = $wp_query; ?>
// on fait sa demande personnalisée
<?php query_posts('cat=10&posts_per_page=6'); ?>
// on affiche tout ça
<?php while (have_posts()) : the_post(); ?>
 <!-- Ici on affiche ses contenus -->
<?php endwhile; ?>

// on remet en place la requete initiale
<?php $wp_query = $temp_query; ?>