Ce tutoriel WordPress est entièrement gratuit.
Merci de désactiver votre bloqueur de pub ! =)

Boucle modifiée, boucles multiples

La boucle peut être altéree pour subvenir à des besoins spécifiques, et on peut en utiliser plusieurs simultanément.

Modifier la boucle principale

La boucle possède un nombre très important de paramètres qui concernent :

Les paramètres par défaut de la boucle

Avant de modifier la boucle, il faut savoir ce qu’elle affiche par défaut :

Pourquoi vouloir modifier la boucle ?

Les raisons sont multiples. On peut vouloir que le nombre de Posts par page affichés sur la page d’accueil soit différent de celui des archives. Ou bien on préfère afficher les Posts dans leur ordre de publication. Ou bien on veut afficher tous les Posts sauf ceux d’une certaine catégorie.

Toutes ces modifications possibles sont rarement utilisées pour la boucle principale mais seront très utiles lorsque l’on voudra créer plusieurs boucles (ce que nous verrons plus bas).

Un exemple : afficher 20 Posts par page pour les archives

Imaginons que l’on veuille afficher davantage de Posts par page pour les templates d’archives, histoire de permettre à l’internaute de trouver plus rapidement ce qu’il cherche.

Créons donc archive.php (que nous n’avions pas encore créé jusqu’ici !) en reprenant le code de category.php :

<?php get_header(); ?>
<div class="main">
  <?php query_posts('posts_per_page=20'); ?>
  <?php get_template_part('loop'); ?>
</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Ta Dah ! Rien de plus simple. On appelle la fonction query_posts() en lui assignant le paramètre posts_per_page qui gère le nombre de Posts par page. Il faut bien faire attention à l’appeler avant la boucle sinon elle ne sera pas prise en compte.

Boucles multiples

Par défaut, il n’y a qu’une seule boucle par template. Que l’on soit sur la page d’accueil, une page d’archives (catégorie, tag, search), la page dédiée single.php ou page.php, on appelle qu’une seule boucle.

Imaginons que l’on veuille afficher une seconde boucle, à tout moment, dans la sidebar. Comment faire ?

Afficher les 5 derniers articles dans la sidebar, sans plugin

Rouvrons sidebar.php et ajoutons une nouvelle boucle :

<!-- Derniers articles -->
<h4 class="section">Derniers articles</h4>
<ul class="list">
  <?php wp_reset_postdata();
  query_posts('posts_per_page=5');
  while (have_posts()) : the_post(); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
  <?php endwhile; ?>
</ul>

Première chose importante : la fonction wp_reset_postdata(). Elle permet de remettre à zéro le compteur de Posts. Il faut toujours utiliser cette fonction entre deux boucles, sinon le ciel vous tombera sur la tête. D’ailleurs, vous pouvez la rajouter une seconde fois après le endwhile si vous voulez.

Ensuite, j’ai omis la condition if (have_posts()) qui n’est pas indispensable car nous avons toujours au moins 1 Post.
Enfin, le reste est similaire à une boucle normale : while, permalink et title. Libre à vous d’ajouter/enlever des données.

Sachez que ces boucles multiples vont être indispensables aux Custom Post.

Différence entre query_posts et WP Query

Selon la doc officielle, la différence est simple :

Mais le souci avec WP Query est qu’il est plus difficile à manipuler parce qu’il génère un simple objet PHP, alors que query_posts permet d’utiliser les fonctions principales intégrées à WordPress.

D’ailleurs, ce paragraphe de la doc officielle stipule qu’il est à tout à fait possible d’utiliser query_posts pour une deuxième boucle. Il suffit d’utiliser la fonction wp_reset_query() ou wp_reset_postdata() comme nous l’avons fait ci-dessous.