Maîtriser WP_Query utiliser la boucle

Comme je l’ai souligné dans l’introduction de cette série, le WP_Query La classe a quatre éléments principaux:

  • les arguments de la requête, en utilisant des paramètres qui seront traités en détail dans cette série
  • la requête elle-même
  • la boucle, qui affichera le contenu, les titres ou tout ce que vous voulez afficher
  • terminer: fermer les balises if et while et réinitialiser les données post

Dans ce tutoriel, je vais vous montrer comment utiliser la boucle avec WP_Query, y compris les deux principaux moyens de structurer votre boucle et comment utiliser plusieurs boucles.

Où la boucle s'adapte

Sans boucle, rien ne sera affiché sur votre page. Une fois que WordPress a exécuté la requête, en utilisant les arguments que vous avez définis, vous devez lui indiquer le type de sortie des données extraites. C'est là que la boucle entre.

La boucle vient donc après votre requête et utilise trois balises:

  • if ($ query-> have_posts ()) vérifie s'il y a des messages.
  • while ($ query-> have_posts ()) répète la boucle pour chaque message tant qu'il y a des messages à récupérer.
  • $ query-> the_post () accède à ce poste spécifique.

C'est donc là que la boucle s'inscrit dans le WP_Query classe:

have_posts ()) // Commence à boucler sur les résultats de la requête. while ($ query-> have_posts ()) $ query-> the_post (); // Le contenu des résultats postés interrogés est disponible ici.  // Restaure les données de publication d'origine. wp_reset_postdata (); ?>

Après avoir exécuté la boucle, tout ce qui reste à faire est de ranger les choses en utilisant wp_reset_postdata ().

Structure de la boucle

La structure de votre boucle dépendra des données que vous souhaitez afficher à partir de votre publication. Voici un exemple de boucle qui affiche le titre du message, l’image sélectionnée et un extrait. Vous utiliseriez une boucle comme celle-ci sur une page d'archive.

have_posts ()) // Commence à boucler sur les résultats de la requête. while ($ query-> have_posts ()) $ query-> the_post (); ?> 
> "title =""> "title ="">

Cette boucle affiche exactement ce que j'ai décrit ci-dessus: l'image sélectionnée, le titre et l'extrait..

Pour aller plus loin: Vérifier le contenu

Mais parfois, vous souhaiterez peut-être ajouter un en-tête avant votre liste d'articles ou vous voudrez peut-être tous les inclure dans un élément contenant. Si vous ajoutez simplement ceci avant votre boucle, la sortie est générée, que la requête renvoie ou non des données, ce qui signifie que vous pouvez avoir un en-tête avec rien en dessous ou des balises inutiles..

C’est très facile de se déplacer en mettant l’élément ou le titre enfermé à l’intérieur de votre si étiquette:

have_posts ()) echo '
'; écho '

'. __ ("Titre", "Tutsplus"). '

'; // Commence à boucler sur les résultats de la requête. while ($ query-> have_posts ()) $ query-> the_post (); ?>
> "title =""> "title ="">
'; // Restaure les données de publication d'origine. wp_reset_postdata (); ?>

Ici, vous pouvez voir que j'ai vérifié s'il y a des articles récupérés par ma requête et s'il y a des articles que j'ai ouverts et que j'ai ajouté un en-tête.. 

Cela est également utile si vous souhaitez afficher les résultats de votre requête sous forme de liste. Disons que je veux créer une liste de tous les messages dans une catégorie donnée. le ul L'élément n'est pas dans ma boucle car il ne concerne pas un article en particulier, mais je ne veux le sortir que s'il y a des articles. Alors j'utilise ceci:

 'category-slug', 'post_type' => 'post'); // requête personnalisée. $ query = new WP_Query ($ args); // Vérifier que nous avons les résultats de la requête. if ($ query-> have_posts ()) echo '
    '; // Commence à boucler sur les résultats de la requête. while ($ query-> have_posts ()) $ query-> the_post (); ?>
  • > "title ="">
  • '; // Restaure les données de publication d'origine. wp_reset_postdata (); ?>

Ceci vérifie si la requête a récupéré des publications et, le cas échéant, ouvre le ul élément puis exécute la boucle.

Exécution de boucles supplémentaires

Il est important de savoir que, même si vous pouvez utiliser WP_Query pour exécuter plusieurs boucles, vous devez réinitialiser les données de publication et démarrer une seconde instance de WP_Query pour faire ça. En effet, chacune de vos boucles produira des données en fonction de différents arguments..

Cet exemple affiche l'extrait et l'image sélectionnée pour le premier message, puis uniquement le titre de chaque message suivant:

 'post', 'posts_per_page' => '1'); // Première requête personnalisée. $ query1 = new WP_Query ($ args1); // Vérifier que nous avons les résultats de la requête. if ($ query1-> have_posts ()) // Commence à boucler sur les résultats de la requête. while ($ query1-> have_posts ()) $ query1-> the_post (); ?> 
> "title =""> "title ="">
'1', 'post_type' => 'post'); // Deuxième requête personnalisée. $ query2 = new WP_Query ($ args2); // Vérifier que nous avons les résultats de la requête. if ($ query2-> have_posts ()) echo '
    '; // Commence à boucler sur les résultats de la requête. while ($ query2-> have_posts ()) $ query2-> the_post (); ?>
  • > "title ="">
  • '; // Restaure les données de publication d'origine. wp_reset_postdata (); ?>

J'ai utilisé deux arguments clés ici:

  • 'posts_per_page' => '1', utilisé avec la première requête, affiche uniquement le message le plus récent.
  • 'offset' = '1', utilisé avec la deuxième requête, saute le premier message, en s'assurant qu'il ne soit pas répété dans la liste ci-dessous.
  • Comme vous pouvez le voir dans le code ci-dessus, la boucle est légèrement différente pour chaque requête. La première affiche l’image, le titre et l’extrait présentés, tandis que la seconde vérifie si la requête contient des publications et, dans l’affirmative, ouvre une fenêtre. ul élément et entoure chaque titre de poste dans un li élément et un lien vers sa page.

Vous remarquerez également que j'ai utilisé wp_reset_postdata () après les deux boucles. Si je ne l'avais pas fait, la deuxième boucle produirait toujours les données de la première.

Résumé

Sans boucle, WP_Query ne fait pas vraiment beaucoup. La boucle est le code que vous utilisez pour afficher les données que WordPress a extraites de la base de données en fonction de vos arguments de requête..

Comme je l'ai démontré, il y a quelques variations sur la boucle. Une simple boucle affichera simplement toutes les publications dans l'ordre que vous avez spécifié dans vos arguments de requête (ou par date dans l'ordre décroissant par défaut). Si vous vous séparez if ($ query-> have_posts ()) et while ($ query-> have_posts ()), vous pouvez insérer des balises supplémentaires en dehors de votre boucle, mais uniquement si votre requête a renvoyé des données. Et enfin, en spécifiant des arguments alternatifs et en utilisant wp_reset_postdata () après chaque boucle, vous pouvez utiliser WP_Query plusieurs fois pour créer plusieurs boucles sur votre page.