Parfois, une page doit afficher des informations contenues dans d'autres posts. Par exemple, une page intitulée Projets pourrait contenir un texte de présentation suivi d'onglets cliquables montrant un aperçu des projets réalisés.

Idéalement, chaque projet aurait sa propre page avec ses propres informations et lorsqu'un projet serait ajouté ou modifié, celui se mettrait à jours automatiquement sur la page Projets sans qu'il ne soit nécessaire d'effectuer d'autres manipulations.

Récupérer des posts

Pour récupérer des posts, il faut effectuer une nouvelle requête à WordPress via la fonction WP_Query et stocker son résultat dans une variable.

Par exemple, pour obtenir tous les posts de type project et les stockers dans une variable $projects, il est possible de faire:

<?php
  $projects = new WP_Query('post_type=project');
?>

Afficher les posts

À partir de cette variable, il est possible d'effectuer une boucle sur les projets retournés et d'accéder au contenu du projet courant comme si nous étions sur cette page directement, tant que le code est inscrit à l'intérieur de la boucle while.

<?php
  $projects = new WP_Query('post_type=project');
  while ($projects->have_posts()) : $projects->the_post(); 
?>
<!-- 👆 Début boucle while -->
  ...
<!-- 👇 Fin boucle while -->
<?php
  endwhile; 
  wp_reset_postdata(); 
?>

Par exemple, si le titre de la page actuelle est Projets et que trois posts de type project sont créés avec pour titre respectif: Apollo, Barracuda et Canari.

La fonction the_title() retournera le titre du post courant soit Projets si elle est utilisée à l'extérieur de la boucle ou le titre de chacun des projets si elle est utilisée à l'intérieur de la boucle.

Par exemple:

<h1><?php the_title(); ?></h1> <!-- 👈 Titre page -->

<?php
  $projects = new WP_Query('post_type=project');
  while ($projects->have_posts()) : $projects->the_post(); 
?>
  <h2><?php the_title(); ?></h2> <!-- 👈 Titre projet -->
<?php
  endwhile; 
  wp_reset_postdata(); 
?>

<!--
<h1>Projets</h1>
<h2>Apollo</h2>
<h2>Barracuda</h2>
<h2>Canari</h2>
-->

Paramètres

Contrôler plus précisément la requêtes faite à WordPress est parfois nécessaire. Par exemple, spécifier le nombre d'éléments à afficher, le critère de trie (nom, date), leur ordre (croissant ⬇ décroissant ⬆️), etc.

Heureusement, il est possible de spécifier le résultat attendu à WordPress en lui passant un tableau (array) d'arguments plutôt qu'une chaine de caractères comme dans les précédents exemples.

Par exemple, si pour obtenir les posts de type project, mais spécifier que trois éléments seulement doivent-être retourné, il est possible de faire:

<?php
  $arguments = array( // 👈 Tableau d'arguments
    'post_type' => 'project',
    'posts_per_page' => 3
  );
  $projects = new WP_Query($arguments); // 👈 Utilisation
  while ($projects->have_posts()) : $projects->the_post(); 
?>
  ...
<?php
  endwhile; 
  wp_reset_postdata(); 
?>