WordPress.org

Langues: English * Français * Italiano * Loop 日本語 Português do Brasil * Русский • 中文 (简体) • 中文 (繁體) * (Ajoutez votre langue)

La Boucle est le code PHP utilisé par WordPress pour afficher les publications. À l’aide de la boucle, WordPress traite chaque publication à afficher sur la page en cours et la met en forme en fonction de la manière dont elle correspond aux critères spécifiés dans Les balises de boucle. Tout code HTML ou PHP dans la boucle sera traité sur chaque publication.

Lorsque la documentation WordPress indique « Cette balise doit être dans la boucle », par exemple pour des balises de modèle ou des plugins spécifiques, la balise sera répétée pour chaque publication. Par exemple, la boucle affiche les informations suivantes par défaut pour chaque publication:

  • Title(the_title())
  • Temps (the_time())
  • Catégories (the_category()).

Vous pouvez afficher d’autres informations sur chaque publication à l’aide des balises de modèle appropriées ou (pour les utilisateurs avancés) en accédant à la variablepostpost, qui est définie avec les informations de la publication actuelle pendant l’exécution de la boucle.

Pour un regard de débutant sur La Boucle, voir La Boucle en action.

En utilisant la Boucle

La Boucle doit être placée dans l’index du thème.php et dans tous les autres modèles utilisés pour afficher les informations de publication.

Assurez-vous d’inclure l’appel du modèle d’en-tête en haut des modèles de votre thème. Si vous utilisez la boucle dans votre propre conception (et que votre propre conception n’est pas un modèle), définissez WP_USE_THEMES sur false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

La boucle commence ici:

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

et se termine ici:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

Ceci utilise la syntaxe alternative de PHP pour les structures de contrôle, et pourrait également être exprimé comme:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

Exemples de boucles

Style Différent des Publications d’une catégorie

Cet exemple affiche chaque publication avec son Titre (qui est utilisé comme lien vers le Permalien de la Publication), ses catégories et son Contenu. Il permet également aux publications d’une catégorie avec l’ID de catégorie ‘3’ d’être stylisées différemment. Pour ce faire, la balise de modèle in_category() est utilisée. Lisez attentivement les commentaires pour voir ce que chaque partie du code fait.

Remarque: Tout le code HTML doit être en dehors du <?php ?balises >. Et, le code PHP (même des choses aussi simples que des accolades: }) doit être à l’intérieur du <?php ?balises >. Vous pouvez démarrer et arrêter des blocs de code PHP pour intercaler du code HTML dans les instructions if et else, comme indiqué dans l’exemple ci-dessus.

Exclure les Publications d’une catégorie

Cet exemple montre comment masquer l’affichage d’une ou de plusieurs Catégories spécifiques. Dans ce cas, les postes des catégories 3 et 8 sont exclus. L’exemple est différent de l’exemple ci-dessus en ce qu’il modifie la requête elle-même.

Remarque: Si vous utilisez cet exemple pour votre page principale, vous devez utiliser un modèle différent pour vos archives de catégories; sinon, WordPress exclura tous les messages de la Catégorie 3 et de la catégorie 8, même lors de l’affichage de cette Archive de catégorie! Cependant, si vous souhaitez utiliser le même fichier de modèle, vous pouvez éviter cela en utilisant la balise is_home() pour vous assurer que les publications des catégories 3 et 8 ne seront exclues que de la page principale:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

Il existe d’autres balises conditionnelles qui peuvent être utilisées pour contrôler la sortie selon qu’une condition particulière est vraie ou non par rapport à la page demandée.

Orientation objet

Les boucles sont une combinaison de comportement orienté objet et global. C’est déroutant au début.

Les deux variables globales importantes pour les boucles sont:

  • $ wp_query qui est un objet de classe WP_Query, contenant un résultat de requête de base de données WP parmi lequelpostswp_query->posts, un tableau de WP_Posts individuels.
  • postpost qui est l’objet courant de la classe WP_Post

Rappelez-vous: Toutes les balises de modèle reposent sur la variable globalepostpost par défaut et la variable globalepostpost est définie / modifiée par the_post(), qui obtient ses données de la variable globalewwp_query. postpost est également défini/modifié par WP_Query::the_post() tel qu’utilisé dans les boucles secondaires.

Boucles multiples

Cette section traite de l’utilisation avancée de la boucle. C’est un peu technique, mais ne vous laissez pas effrayer. Nous allons commencer par un exemple facile et travailler à partir de là. Avec un peu de bon sens, de patience et d’enthousiasme, vous aussi pouvez faire plusieurs boucles.

Tout d’abord, pourquoi voudrait-on utiliser plusieurs boucles? En général, la réponse est que vous voudrez peut-être faire quelque chose avec un groupe de publications et faire quelque chose de différent d’un autre groupe de publications, mais afficher les deux groupes sur la même page. « Quelque chose » pourrait signifier presque n’importe quoi; vous n’êtes limité que par vos compétences en PHP et votre imagination.

Nous allons entrer dans les exemples ci-dessous, mais vous devriez d’abord lire les bases. Jetez un œil à la boucle de base. Il se compose de:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

Un peu de côté sur Faire des choses: dans cet exemple, il s’agit simplement d’un espace réservé pour un tas de code qui détermine comment formater et afficher chaque publication sur une page. Ce code peut changer en fonction de l’apparence de votre WordPress. Si vous regardez l’index du thème Kubrick.php la section do stuff serait tout ci-dessous:

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

Vers ci-dessus:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

Une explication pour les codeurs disponibles : Les fonctions have_posts() et the_post() sont des wrappers pratiques autour de l’objet global $wp_query, où se trouve toute l’action. Lewwp_query est appelé dans l’en-tête du blog et alimente les arguments de requête entrant via GET et PATH_INFO. Lewwp_query prend les arguments et construit et exécute une requête de base de données qui aboutit à un tableau de messages. Ce tableau est stocké dans l’objet et est également renvoyé à l’en-tête du blog où il est inséré dans le tableau global $posts (pour une rétrocompatibilité avec les anciennes boucles de messages).

Une fois que WordPress a fini de charger l’en-tête du blog et descend dans le modèle, nous arrivons à notre boucle de publication. La fonction have_posts() appelle simplementhavewp_query-> have_posts() qui vérifie un compteur de boucles pour voir s’il reste des messages dans le tableau post. Et the_post() appelle $wp_query-> the_post() qui avance le compteur de boucles et configure la variable globale $post ainsi que toutes les données globales post. Une fois que nous avons épuisé la boucle, have_posts() retournera false et nous avons terminé.

Exemples de boucles

Voici trois exemples d’utilisation de plusieurs boucles. La clé pour utiliser plusieurs boucles est quewwp_query ne peut être appelé qu’une seule fois. Pour contourner ce problème, il est possible de réutiliser la requête en appelant rewind_posts() ou en créant un nouvel objet de requête. Ceci est couvert dans l’exemple 1. Dans l’exemple 2, l’utilisation d’une variable pour stocker les résultats d’une requête est couverte. Enfin, « boucles multiples en action » rassemble un tas d’idées pour documenter une façon d’utiliser plusieurs boucles pour promouvoir les publications d’une certaine catégorie sur la page d’accueil de votre blog.

Boucles multiples Exemple 1

Pour parcourir la même requête une deuxième fois, appelez rewind_posts(). Cela réinitialisera le compteur de boucles et vous permettra de faire une autre boucle.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

Si vous avez terminé avec les messages de la requête d’origine et que vous souhaitez utiliser une requête différente, vous pouvez réutiliser l’objetwwp_query en appelant query_posts(), puis en boucle. La fonction query_posts() effectuera une nouvelle requête, créera un nouveau tableau de messages et réinitialisera le compteur de boucles.

Si vous devez conserver la requête d’origine, vous pouvez créer un nouvel objet de requête.

Boucles multiples Exemple 2

Une autre version de l’utilisation de boucles multiples prend une autre touche pour contourner l’incapacité d’utiliser have_posts() et the_post(). Pour résoudre ce problème, vous devez stocker la requête d’origine dans une variable, puis la réaffecter à l’autre boucle. De cette façon, vous pouvez utiliser toutes les fonctions standard qui reposent sur tous les globaux.

Par exemple :

Remarque: En PHP 5, les objets sont référencés avec l’opérateur « =clone » au lieu de « = » comme en PHP 4. Pour que l’exemple 2 fonctionne en PHP 5, vous devez utiliser le code suivant:

Cependant, ce deuxième exemple ne fonctionne pas dans WordPress 2.1.

Boucles multiples en action

La meilleure façon de comprendre comment utiliser plusieurs boucles est de montrer un exemple de son utilisation. L’utilisation la plus courante de plusieurs boucles est peut-être d’afficher deux (ou plus) listes de publications sur une page. Cela se fait souvent lorsqu’un webmaster souhaite présenter non seulement le tout dernier article écrit, mais également des articles d’une certaine catégorie.

En laissant de côté tous les problèmes de formatage et de CSS, supposons que nous souhaitions avoir deux listes de publications. Un qui répertorierait les messages les plus récents (les 10 messages standard les plus récemment ajoutés), et un autre qui ne contiendrait qu’un seul message de la catégorie « en vedette ». Les publications de la catégorie « en vedette » doivent être affichées en premier, suivies de la deuxième liste des publications (la norme). Le hic est qu’aucun message ne devrait apparaître dans les deux catégories.

Étape 1. Obtenez un seul article de la catégorie « en vedette ».

En anglais, le code ci-dessus se lirait comme suit:

Setmymy_query égal au résultat de l’interrogation de tous les messages où la catégorie est nommée en vedette et au fait, obtenez-moi un seul message. De plus, définissez la variabledodo_not_duplicate égale au numéro d’identification du seul message renvoyé. Rappelons que la ligne Do stuff représente toutes les options de formatage associées à la publication récupérée.

Notez que nous aurons besoin de la valeur dedodo_not_duplicate à l’étape suivante pour nous assurer que le même message n’apparaît pas dans les deux listes.

Étape 2. La deuxième boucle, obtenez les X derniers messages (sauf un).

Le code suivant obtient X publications récentes (telles que définies dans les préférences WordPress) enregistrez celle déjà affichée à partir de la première boucle et les affiche en fonction des choses à faire.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

En anglais, le code ci-dessus se lirait comme suit:

Obtenez tous les messages, où un message est égal àdodo_not_duplicate puis ne faites rien (continuez), sinon affichez tous les autres messages selon Do stuff. En outre, mettez à jour le cache pour que les plugins de marquage et de mots clés jouent bien. Rappel, la variabledodo_not_duplicate contient l’ID du message déjà affiché.

Le résultat final

Voici à quoi ressemble le dernier morceau de code sans aucune mise en forme:

Le résultat final serait une page avec deux listes. La première liste ne contient qu’une seule publication – la publication la plus récente de la catégorie « fonctionnalité ». La deuxième liste contiendra X publications récentes (telles que définies dans les préférences WordPress) à l’exception de la publication déjà affichée dans la première liste. Ainsi, une fois la fonctionnalité post remplacée par une nouvelle, la fonctionnalité précédente apparaîtra dans la section liste des publications standard ci-dessous (en fonction du nombre de publications que vous choisissez d’afficher et de la fréquence des publications). Cette technique (ou similaire) a été utilisée par beaucoup en conjonction avec la connaissance de la hiérarchie des modèles pour créer un look différent pour la maison.php et index.php. Voir les ressources associées au bas de cette page.

Remarque pour plusieurs Publications de la Première Catégorie

Si posts_per_page = 2 ou plus, vous devrez modifier un peu le code. La variabledodo_not_duplicate doit être changée en un tableau par opposition à une seule valeur. Sinon, la première boucle se terminera et la variabledodo_not_duplicate ne sera égale qu’à l’id du dernier message. Cela entraînera des publications dupliquées dans la deuxième boucle. Pour résoudre le problème, remplacez

par

Notez que « posts_per_page » peut être n’importe quel nombre.Cela change $do_not_duplicate dans un tableau. Remplacez ensuite

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

par

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

Où vous continuez le modèle pour tout ce que posts_per_page est défini égal à (2 dans ce cas).

Vous pouvez également passer l’ensemble du tableaudodo_not_duplicate àwwp_query et seules les entrées correspondant à vos critères seront renvoyées:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

Notez qu’au lieu d’une chaîne, le paramètre de requête était un tableau associatif définissant l’option post__not_in.

Boucles imbriquées

Boucles imbriquées signifie que vous exécutez une deuxième boucle avant de terminer la première. Cela peut être utile pour afficher une liste de publications avec un shortcode par exemple.

$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();

Il est nécessaire de réinitialiser les données de la boucle principale après une boucle imbriquée afin que certaines variables globales conservent à nouveau les valeurs correctes.

Sources

La section sur les boucles multiples est une combinaison de la discussion de Ryan Boren et Alex King sur la Boucle de la liste de diffusion des pirates. L’exemple des boucles imbriquées a été inspiré par une autre discussion sur la liste de diffusion et un article de Nicolas Kuttler.

Ressources

  • Générateur WordPress WP_Query
  • Entrer dans la Boucle – (diapositives) une introduction à la façon dont les plugins et les thèmes peuvent modifier la Boucle
  • Boucle personnalisée WordPress
  • Générateur de boucle WordPress WP_Query

Connexe

Pour en savoir plus sur la Boucle WordPress, et les différentes balises de modèle qui ne fonctionnent qu’au sein de la Boucle, voici d’autres ressources:

En savoir plus Sur La Boucle

  • Article: La Boucle en action
  • Article: Balises de modèle
  • Article: Utilisation de la boucle dans les fichiers de modèle

Articles

  • Article: La Boucle – Un aperçu de base de son utilisation de la requête dans la boucle WordPress.
  • Article: Aperçu des requêtes – Explication de la façon de déterminer quelles requêtes génèrent WordPress.
  • Article: Personnalisation des requêtes via Hook
  • Article: Afficher les articles Requête MYSQL à l’aide personnalisée
  • Article: Construire des requêtes avancées sur les Taxonomies
  • Article: Construire une requête personnalisée à l’aide de l’offset et de la pagination

Documentation du code

  • Classe: WP_Query – Vue d’ensemble détaillée de la classe WP_Query
  • Classe: WP_Comment_Query-Classe pour les requêtes liées aux commentaires
  • Classe: WP_User_Query-Classe pour les requêtes liées aux utilisateurs
  • Objet:wwpdb – Vue d’ensemble sur l’utilisation de l’objetwwpdb
  • Fonction: set_query_var( )
  • Function: get_query_var()
  • Function: query_posts() – Crée une requête personnalisée supplémentaire
  • Function: get_post() – Prend un ID d’un élément et renvoie les enregistrements dans la base de données pour cet article
  • Function: get_posts() – Une fonction spécialisée qui renvoie un tableau d’éléments
  • Function: get_pages() – Une fonction spécialisée qui renvoie un tableau de pages
  • Function: have_posts() – Une condition qui détermine si la requête a renvoyé un article
  • Function: the_post() – Utilisé pour définir automatiquement la boucle après une requête
  • Function: rewind_posts() () – Efface la boucle actuelle
  • Fonction : setup_postdata() – Définit les données d’un résultat de requête unique dans une fonction de boucle
  • : wp_reset_postdata() – Restaure la requête précédente (généralement après une boucle dans une autre boucle)
  • Fonction: wp_reset_query()
  • Fonction: is_main_query() – Garantit que la requête en cours de modification n’est que la requête principale
  • Crochet d’action: pre_get_posts – Modifie les requêtes WordPress avant leur exécution
  • Crochet d’action: the_post – Modifie l’objet post après la requête
  • Crochet de filtre: found_posts – Modifie la valeur de l’objet found_posts WP_Query
Cet article est marqué comme nécessitant une modification. Vous pouvez aider Codex en le modifiant.

You might also like

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.