Requêtes personnalisées WordPress – Boucles multiples

Publié: 2021-01-29

Dans la plupart des cas, lors de la création d'un site Web avec WordPress, le thème que vous activez affichera par défaut une page d'accueil qui répertorie vos publications récentes, sauf si vous choisissez d'afficher une page statique à partir des options d'administration sous Paramètres > Lecture. Mais que se passe-t-il si vous souhaitez afficher une gamme de contenu différente qui n'est ni une page statique ni vos derniers messages ? Heureusement, cela est possible en utilisant WordPress Multiple Loops.

Voyons comment cela peut être accompli !

Utilisez plusieurs boucles sur votre page d'accueil WordPress

Avant de commencer, il convient de noter que vous devez effectuer ces modifications sur votre propre site Web en utilisant un thème enfant, car nous modifierons les fichiers de modèle de votre thème. Si vous ne le faites pas, vous constaterez que vous perdrez toutes les modifications que vous apporterez la prochaine fois que vous mettrez à jour votre thème. Vous pouvez en savoir plus sur les thèmes enfants ici.

Quel que soit le thème que vous utilisez, le fichier PHP correspondant pour la page d'accueil inclura une boucle standard qui affiche certains articles (dans la plupart des cas, il s'agira d'articles récemment publiés). Dans le thème Twenty Twenty par exemple, vous trouverez le code qui contrôle cela dans le fichier index.php autour de la ligne 79.

 if ( have_posts() ) { $i = 0; while ( have_posts() ) { $i++; if ( $i > 1 ) { echo '<hr class="post-separator styled-separator is-style-wide section-inner" aria-hidden="true" />'; } the_post(); get_template_part( 'template-parts/content', get_post_type() ); } }

Dans une boucle standard comme celle-ci, deux variables globales importantes sont utilisées :

  • Le $wp_query qui est un objet de classe WP_Query et contient un résultat de requête de base de données WP
  • Le $post qui est l'objet de classe WP_Post actuel.

Dans le morceau de code ci-dessus, nous vérifions d'abord s'il y a des publications à afficher avec la fonction globale have_posts() et, si c'est le cas, parcourons ces publications dans une boucle while. La fonction globale the_post() est celle qui parcourt les articles en disant à WordPress d'aller au prochain article.

Si vous souhaitez voir ces fonctions et classes en détail, vous pouvez les trouver dans le fichier wp-includes/class-wp-query.php .

Pour les besoins de notre exemple, nous avons activé le thème Twenty Twenty, puis créé 6 publications dans une catégorie appelée « Catégorie 1 » et 5 publications de service dans une catégorie nommée « Services ».

Pour simplifier les choses, nous garderons le code de boucle aussi simple que possible en affichant uniquement une liste des titres des articles.

 if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h3 class="entry-title">', '</h3>' ); } }

Cela signifie que sur notre page d'accueil, nous verrons quelque chose comme ceci :

Mise en route Personnalisation de la sortie de notre page d'accueil

Comme nous l'avons vu sur la capture d'écran ci-dessus, si nous visitons notre "page d'accueil", nous verrons les 10 publications les plus récentes, quelles que soient les catégories qui leur ont été attribuées.

Nous allons maintenant procéder à la création de notre propre modèle de page d'accueil personnalisé dans lequel nous inclurons une sortie personnalisée.

Pour ce faire, créez un fichier appelé custom-homepage.php et enregistrez-le dans le dossier de votre thème. Ajoutez le code suivant à cette page :

 <?php /* * Template Name: My custom homepage template */ get_header(); if ( have_posts() ) { while ( have_posts() ) { the_post(); the_title( '<h4 class="example"></h4>' ); } } get_footer();

Ensuite, dirigez-vous vers votre administrateur WordPress et créez une page appelée "Ma page d'accueil" et sélectionnez "Mon modèle de page d'accueil personnalisé" dans le menu déroulant Modèle en tant que modèle.

Ensuite, pour en faire la page d'accueil par défaut, vous devrez la sélectionner dans le menu Paramètres (Paramètres> Lecture> Une page statique).

À ce stade, si vous jetez un coup d'œil à votre page d'accueil, vous ne devriez voir que le titre de la page lorsqu'il est affiché depuis l'avant de votre site Web.

Maintenant que nous avons cette configuration, ajoutons quelques requêtes à notre modèle "Mon modèle de page d'accueil personnalisé".

Ajout de requêtes personnalisées

Notre objectif dans cet exemple sera d'afficher certains de nos derniers messages de toutes les catégories. En dessous, nous afficherons les publications d'un type de publication personnalisé appelé "livres". Si vous ne savez pas comment configurer les types de publication personnalisés, consultez l'article "Créer manuellement des types de publication personnalisés WordPress". L'inclusion d'un type de publication personnalisé est bien sûr entièrement facultative. Si vous ne voulez pas le faire, ignorez simplement les étapes où nous nous référons à ce type de publication.

Commençons par remplacer la boucle courante (trouvée dans index.php vers la ligne 79) par celle-ci :

 $args = array( 'posts_per_page' => 8, 'orderby', 'date', 'order', 'DESC' ); $query = new WP_Query( $args ); while ( $query->have_posts() ) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Cette boucle signifie que votre page d'accueil affichera désormais vos 8 publications les plus récentes (comme indiqué ci-dessous) :

Ensuite, si vous souhaitez inclure le type de publication personnalisé "livres" (ou tout autre type de publication personnalisé d'ailleurs), nous ajouterons une deuxième boucle pour les publications de livres juste sous la première boucle comme ceci :

 echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', 'posts_per_page' => 8 ); $query = new WP_Query( $args ); while ($query->have_posts()) : $query->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile;

Rendez-vous à l'avant de votre site Web et actualisez la page pour confirmer que tout fonctionne comme prévu.

Décomposer une requête personnalisée en plusieurs parties

Il peut être utile de diviser une requête personnalisée en plusieurs parties. Une raison de le faire serait si vous vouliez « interrompre » la première requête en affichant les publications d'une autre catégorie ou d'un autre type de publication avant de reprendre la boucle initiale. Ceci est utile si, par exemple, vous souhaitez afficher les derniers messages d'une catégorie, puis afficher d'autres contenus avant de conclure avec plus de "derniers messages" pour terminer la page.

Allons-y. Pour commencer, supprimez le contenu du fichier custom-homepage.php que nous avons utilisé auparavant et ajoutez le code ci-dessous.

 <?php /* * Template Name: My custom homepage template */ get_header(); //////////// // Services Posts loop echo '<h4>Services</h4>'; $args = array( 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Books Posts in between echo '<h4>Books</h4>'; $args = array( 'post_type' => 'book', ); $books = new WP_Query( $args ); while ( $books->have_posts() ) : $books->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; // Resume Services Posts loop echo '<h4>More Services</h4>'; $args = array( 'offset' => '3', 'posts_per_page' => 3, 'category_name'=> 'services' ); $services = new WP_Query( $args ); while ( $services->have_posts() ) : $services->the_post(); the_title( '<h4 class="example"></h4>' ); endwhile; //////////// get_footer();

Dans la première boucle on récupère 3 posts de la catégorie Services. Afin de reprendre les posts de la catégorie Services dans la troisième boucle tout en évitant les doublons, nous définissons un décalage => 3 . Cela signifierait que nous verrions ce qui suit :

Bien sûr, vous pouvez modifier la valeur de décalage à n'importe quel nombre que vous souhaitez.

Ajouter des messages personnalisés à la requête des derniers messages

Que se passe-t-il si nous voulons inclure les articles de livre dans les derniers articles de la page d'accueil ? La boucle par défaut n'inclut pas par défaut les publications personnalisées. Voici comment nous pouvons résoudre ce problème.

Pour cette section, nous définirons les paramètres de lecture de la page d'accueil sur "Vos derniers messages".

La route à suivre ici est l'utilisation du crochet pre_get_posts . Ce crochet est introduit dans le fichier wp-includes/class-wp-query.php et est utilisé pour personnaliser l'objet $query et la boucle WordPress principale comme bon vous semble. Il s'exécute après la création de l'objet variable de requête, mais avant l'exécution de la requête proprement dite.

Ouvrez le fichier functions.php de votre thème actif et insérez le morceau de code suivant à la fin :

 function homepage_add_cpt( $query ) { if ( $query->is_main_query() && is_home() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } add_action( 'pre_get_posts', 'homepage_add_cpt' );

Ce que fait ce code dans la condition if est de s'assurer que les modifications sont appliquées dans la page d'accueil uniquement pendant l'exécution de la requête principale.

Si vous visitez maintenant votre page d'accueil, vous remarquerez que dans les derniers messages, les messages personnalisés de "livre" sont également inclus.

Conclusion

À peu près sans exception, tout ce que vous devez réaliser en termes de contenu pour votre page d'accueil WordPress est possible. Comme nous l'avons montré ici, l'utilisation de WordPress Multiple Loops est un moyen puissant de personnaliser la sortie qui apparaît sur votre page d'accueil. Notre approche ici n'en est qu'une parmi tant d'autres. WordPress offre des niveaux de contrôle incroyables sur la sortie qui apparaît sur votre site. Expérimentez avec les outils qu'ils fournissent pour obtenir ce que vous voulez !