C’est grâce au mécanisme appelé Boucle WordPress (en anglais The Loop) que l’on peut afficher dans nos templates les données administrées dans le CMS. Voyons comment les utiliser.
Sommaire du cours
Qu’est-ce que la boucle WordPress ?
Lorsque l’on développe un thème WordPress, impossible de passer à côté de la boucle WordPress. Voyons à quoi ce concept correspond :
Boucle WordPress
Définition
Cette boucle a la particularité d’être exactement la même sur tous les templates de page que l’on va créer. Il suffira alors de la copier/coller dans tous nos modèles.
Maintenant que l’on a vu le template hierarchy, on va commencer par aller modifier le fichier front-page.php qui s’affichera lorsqu’on demande la page d’accueil :
Copiez exactement le même code pour page.php. À l’avenir notre page d’accueil sera différente des pages « standard » mais pour le moment ça nous suffira.
Lorsque l’on affiche le site dans le navigateur, on a bien le contenu de notre page d’accueil qui s’affiche :
Cool ! Il faudra ajouter un peu de CSS pour que ça rende plus « joli », mais ce n’est pas l’objet de ma formation. Vous pouvez cependant apprendre les bases du CSS dans la formation CSS gratuite de MDN.
Bon, là, vous êtes en train de vous dire que pour faire des grosses mises en page, WordPress sera vite limité. En effet. Pour aller plus loin il faudra utiliser un Page builder comme Elementor ou ajouter des champs personnalisés avec ACF. Et c’est ce que l’on verra plus tard, alors patience !
Pour le moment, revenons-en à ma boucle. On va l’étudier un peu plus en détails :
La première fonction, have_posts()
contrôle qu’il y a bien quelque chose à afficher, quel que soit le cas de figure (afficher le contenu d’une page, un article, une liste d’articles…).
Vient ensuite une boucle PHP while
. Vous allez me dire : à quoi bon ? Puisqu’il n’y a qu’un seul contenu à afficher : la page ? Eh bien comme je disais plus haut, ce code a été conçu pour être valide dans toutes les situations. Il marchera donc que ce soit pour afficher un seul contenu (un article ou une page) ou le blog (liste des articles).
La fonction qui suit, the_post()
permet de préparer les données de l’article afin de les afficher à l’intérieur de la boucle, via les template tags.
Que sont les templates tags ?
Template Tags
Définition
Ils en existe de plusieurs sortes mais on va se concentrer pour le moment sur ceux permettant d’afficher les données de notre article. Dans le code vu plus haut, on en a utilisé deux :
La fonction the_title()
permet d’afficher le titre et the_content()
va afficher le contenu de la page, c’est-à-dire ce que l’on a écrit avec l’éditeur visuel.
Ce sont les deux template tags les plus utilisés ! Il en existe d’autres que l’on va voir avec les pages du blog, mais pour les pages, on n’a pas besoin de grand chose de plus.
La boucle dans le cas du blog
On va maintenant aller voir ce que donne la boucle dans le cas du blog ! Et ici, on va pouvoir utiliser d’autres templates tags. Pour cela on va ajouter quelques lignes de PHP dans nos templates :
La liste des derniers articles (archive et home)
On commence avec la page d’archives, qui liste par défaut les 10 derniers articles publiés sur le blog :
D’après le template hierarchy, la page d’accueil du blog a un modèle différent, via home.php, au cas où vous voudriez que la page principale du blog soit différente des autres archives (affichage par auteur ou catégorie par exemple). En fait c’est rarement le cas. Du coup pour le moment on va copier le même code dans archive.php, ainsi que dans home.php. Un peu plus tard, on viendra corriger cette répétition de code.
Comme on n’a pas (encore) de menu sur notre site pour accéder au blog, on va passer par l’admin WordPress : Pages > Toutes les pages, puis survoler notre page Blog et cliquer sur Afficher. Si votre page s’appelle blog, ajoutez simplement /blog/
à la fin de l’adresse de votre site. On tombe sur la liste des articles :
Notez que cette fois, on met des <h2>
pour les titres d’article, et le titre principal de la page est « Le blog Capitaine WP ». Comme vous le savez sûrement, il devrait toujours n’y avoir qu’un seul <h1>
par page.
Voyons maintenant les nouveaux templates tags ajoutés :
L’image mise en avant
La fonction the_post_thumbnail()
permet d’afficher l’image mise en avant (anciennement image à la Une).
Pour rappel on avait activé cette fonctionnalité grâce à la fonction add_theme_support('post-thumbnails')
dans le fichier functions.php, dans le cours Créer la base de son thème.
L’image mise en avant se configure dans la barre d’outils latérale :
Cette fonction ne renvoie pas que l’URL de l’image, mais carrément toute la balise <img>
: Cela permet de ne pas afficher une balise vide si aucune image n’a été définie.
La date
Pour afficher la date, on dispose de 2 fonctions : the_date()
, et the_time()
. Dans cette dernière on doit indiquer le format d’affichage via les paramètres de Date PHP classiques. D’ailleurs je récupère, grâce à la fonction get_option()
, la valeur indiquée dans Réglages > général > Format de date.
Mais pas besoin de tout cela sur la première fonction. Alors pourquoi diantre ne pas utiliser the_date()
tout simplement ?
En fait cette fonction n’affiche qu’une seule fois la même date : si plusieurs articles sont publiés le même jour, seul le premier affichera la date. En réalité on s’en sert pour un classement chronologique ou on affiche d’abord une date, puis la liste des articles publiés ce jour-ci.
C’est pour cela que dans notre cas précis, the_time()
sera plus indiqué.
L’auteur
La fonction the_author()
permet d’afficher le nom de l’auteur, tel qu’il l’a défini dans Utilisateurs > Votre profil > Nom à afficher publiquement. Par mesure de sécurité, évitez d’afficher votre identifiant de connexion.
Le nombre de commentaires
Et pour finir il existe également des template tags dédiés aux commentaires comme comments_number()
qui affiche le nombre de commentaires publiés dans cet article.
Par défaut il va afficher : Pas de commentaire, 1 commentaire ou X commentaires. Mais vous allez pouvoir personnaliser cet affichage. Si on s’en réfère à la documentation, on voit qu’on peut ajouter 3 paramètres : un pour chaque cas.
Dans le cas du site Capitaine WP, j’ai opté pour n’afficher que le nombre de commentaires, suivi d’une icône « bulle ». Le signe %
est un caractère magique qui sera remplacé par le nombre réel de commentaires, lorsqu’il y en a au moins deux (pluriel).
L’extrait
Cette fois on utilise la fonction the_excerpt()
à la place de the_content()
afin de n’afficher qu’un extrait de l’article, et pas l’article en entier. Le but reste que la personne clique sur l’article de son choix pour l’afficher.
L’extrait fonctionne en trois temps. Il va d’abord regarder si l’auteur a renseigné le champ extrait dans la barre latérale à droite :
Si le champ est vide, il va cette fois regarder dans l’article si le bloc Lire la suite est présent :
Et sinon il va couper automatiquement l’article après 55 mots (on pourra d’ailleurs modifier cette valeur plus tard).
Je déconseille la dernière option : en général le découpage se fait en plein milieu d’une phrase et ce n’est pas élégant.
Utilisez :
- Le bloc Lire la suite pour faire apparaitre le début (controlé) de l’article ;
- Le champ Extrait si vous voulez une description de l’article différente du contenu.
Aparté: The Excerpt VS The Content
En réalité c’est légèrement plus compliqué que ça ! Vous pourriez aussi conserver the_content() : dans le cas d’une page archive il s’arrête aussi dès qu’il voit le bloc « Lire la suite ». De plus il ajoutera un lien (lire la suite) mais qui est plus difficile à personnaliser en CSS.
Par contre il ignore complètement le champ « Extrait » et affiche l’article en entier si le bloc « Lire la suite » n’est pas présent.
En définitive je préconise l’utilisation de the_excerpt() en priorité sur les pages archive.
Ah, et une dernière chose importante :
Le Permalien
La fonction the_permalink()
permet d’afficher le lien vers l’article. il faut placer cette fonction dans l’attribut href de la balise <a>
. On appelle ces liens des permaliens et ils sont générés automatiquement par WordPress.
Vous pouvez configurer la structure des permaliens dans Réglages > Permaliens.
Dans cet exemple je n’ai mis le lien que sur le texte « Lire la suite », mais j’aurais pu également l’appliquer sur le titre ainsi que sur l’image mise en avant, de la même manière.
Afficher un article (single)
Passons maintenant aux articles. En cliquant sur un lien dans la page du blog, c’est la page single.php qui est appelée. Voici le code PHP que j’ai choisi d’y mettre :
Copiez-le dans single.php et affichez un article sur votre blog :
On va passer en revue les nouveaux template tags utilisés dans cette page :
L’avatar de l’auteur
la fonction get_avatar()
permet de récupérer l’avatar de l’auteur, en se servant du service Gravatar. Si vous n’en n’avez pas déjà fait un, allez le créer gratuitement sur ce site.
Le saviez-vous ?
Gravatar appartient à Automattic, la maison mère de WordPress. Ce service d’avatars décentralisé est utilisé par de nombreux services web comme Github ou Stack Overflow par exemple.
Vous allez me demander pourquoi je n’ai pas utilisé the_avatar()
: tout simplement parce que cette fonction n’existe pas ! Pourquoi ? Eh bien, euh, bonne question !
Le premier paramètre attendu est l’identifiant de l’utilisateur dont on doit afficher l’avatar. Dans notre cas, c’est l’auteur. On récupère son identifiant par un autre template tag get_the_author_meta('ID')
.
Le second paramètre est la taille de l’image. En effet Gravatar peut la générer à la volée pour vous. J’ai défini 40 pour une image carrée de 40px de côté.
Les catégories et les étiquettes
Et enfin on utilise the_category()
et the_tags()
pour afficher la catégorie et les éventuelles étiquettes (anciennement mots-clés).
Cela aura pour effet d’afficher des listes <ul><li>
. En cliquant sur une catégorie, vous afficherez une archive des derniers articles de cette catégorie seulement.
Notez que je n’ai pas affiché les catégories ni les étiquettes dans la page archive, mais j’aurais pu tout à fait le faire : le choix des informations que vous allez afficher ou non est complètement arbitraire en fonction des besoins de votre site. Les template tags fonctionnent dans n’importe quelle boucle.
Liste des Template Tags les plus utilisés
Pour résumer, voici la liste des templates tags que l’on va utiliser le plus régulièrement :
the_title()
: affiche le titre de l’article ou la page ;the_content()
: affiche le contenu, écrit depuis l’éditeur visuel (Gutenberg ou TinyMCE) ;the_post_thumbnail()
: affiche l’éventuelle image mise en avant ;the_excerpt()
: affiche un extrait de l’article, soit le contenu du champ extrait, soit le début de l’article jusqu’à la balise Lire la suite ;the_category()
: affiche une liste de la ou des catégories sélectionnées ;the_tags()
: affiche une liste des éventuelles étiquettes de l’article ;the_author()
: affiche le nom de l’auteur ;the_author_link()
: affiche le nom de l’auteur avec un lien vers son site personnel ;the_date()
: affiche une fois les dates où des articles ont été publiés ;the_time()
: affiche la date de publication de chaque article ;the_permalink()
: affiche l’URL vers l’article, à mettre dans une balise<a>
;comment_number()
: affiche le nombre de commentaires publiés dans l’article ;get_avatar()
: Récupère l’avatar d’un utilisateur depuis le service Gravatar ;
Utilisez-les comme bon vous semble dans vos templates !
Pour connaitre la liste complète de tous les templates tags, référez-vous à la documentation officielle : liste des template tags.
En règle générale, allez toujours faire un tour dans la documentation développeurs afin de tout savoir de la fonction que vous souhaitez utiliser et ses éventuels paramètres (comme on a pu le voir avec le nombre de commentaires) et en découvrir de nouvelles.
Un bon développeur lit la documentation ! Comme on dit dans le métier : RTFM !
Documentation développeurs WordPress
Want to know what’s going on inside WordPress? Search the Code Reference for more information about WordPress’ functions, classes, methods, and hooks.
Les équivalents en « get »
Parfois, vous aurez besoin de récupérer la valeur sans directement l’afficher dans votre template, afin de la traiter en PHP. Si vous souhaitez récupérer la valeur du titre sans l’afficher par exemple, the_title()
ne fonctionnera pas, il faudra alors utiliser son équivalent get_the_title()
:
Retenez donc que :
- Les fonctions en
the_
affichent directement la donnée dans le template ; - Les fonctions en
get_
la récupèrent sans l’afficher, en vue d’un traitement.
Comme vous pouvez vous en douter, il existe un équivalent « get » à chacun des template tags.
Grâce à la boucle WordPress, aux template tags et au template hierarchy, on a ajouté pas mal de dynamisme à notre thème ! Dans les cours suivants, on va voir quelques autres concepts utiles pour gérer nos templates.
Cisco
Le 1 février 2019
C’est juste génial de pouvoir lire un article d’une telle qualité et en Français, bravo Cap’tain et vivement la suite.
Merci pour les ressources gratuites, pressé de pouvoir accéder aux contenus premiums
Maxime BJ
Le 2 février 2019
Merci ! Et il est tout frais de la semaine dernière celui-là !
beddiaf dalila
Le 7 mars 2019
vivement la suite sur wp_Query ,et mille merci pr ce travail
Maxime BJ
Le 8 mars 2019
Merci !
En attendant le cours j’ai mon ancien article sur GeekPress qui pourra t’aider : http://www.geekpress.fr/wp-query-creez-des-requetes-personnalisees-dans-vos-themes-wordpress/
alex
Le 5 février 2020
super tuto, j’apprends énormément.
Par contre pour l’histoire d’un seul H1 par page, il est montré que l’on peut en mettre plusieurs dans une page tout en ayant une sémantique logique . Par exemple si code possède plusieurs on peut mettre dans chacune de ces dernières un titre en h1. Une bonne aide au référencement
Maxime BJ
Le 6 février 2020
D’après le W3C et HTML5 oui tout à fait. On peut remettre des H1 dans des sections, articles, aside… Mais je préfère faire plaisir à Google. Après tout il n’y a qu’un seul « titre principal » dans la page. Du coup tout ce qui est à côté, sera fait en
avec des classes spécifiques. Beaucoup préfèrent cette approche et j’en fais partie.
Denis
Le 31 mars 2020
Voulant découvrir trop vite cette formation, car intéressé, j’ai lu bien trop rapidement la plupart des pages et finalement… Ce n’est pas la bonne méthode… surtout en tant que débutant.
Du coup, j’ai TOUT recommencé dès le début, pris mon temps, noté dans un fichier word chaque explication, créé un glossaire sur les termes spécifiques tels que slug, template tags, template hierarchy, etc…
Actuellement, à ce matin, j’en suis là et je suis ravi. Je comprends TOUT de cette formation. C’est génial. Cette formation est claire et dispensée de façon très professionnelle.
Merci à toi Maxime…
Maxime BJ
Le 23 mars 2021
Merci beaucoup Denis ! Ça me fait plaisir de savoir que mes supports sont utiles !
audebert
Le 11 mai 2020
super intéressant, et du pratique, concret.
j’ai cependant relevé un lien vers les template tags qui est mort.
Maxime BJ
Le 11 mai 2020
Merci ! Est-ce que tu peux me dire lequel exactement ? Je ne l’ai pas trouvé.
Emmanuel
Le 12 mai 2020
Bonjour Maxime
Une image mise en avant doit elle exister dans un article (single) pour pouvoir aussi apparaître dans la page blog (home) ? C’est le cas chez moi. Si je n’en définie aucune dans un article, je n’en ai aucune qui apparaît dans la page de blog malgré la définition de celle ci dans ses réglage
Maxime BJ
Le 23 mars 2021
Il faut comprendre que l’image mise en avant est attachée à un article, pas au blog. Donc si tu n’en mets pas sur un article donné, c’est normal que tu ne vois rien en toute circonstance.
Dominique
Le 28 juillet 2021
Bonjour et encore merci pour cette excellent tuto.
Je suis avec Worpress 5.8 pour Gravatar je n’arrive pas a mettre mon avatar dans mon article ?
J ai pourtant cree mon avatar chez gravatar mais je ne comprend pas tres bien la procédure pour bien l’inscrire dans mon code.
Maxime BJ
Le 28 juillet 2021
Salut Dominique. Ça devrait pourtant marcher avec cette ligne : echo get_avatar( get_the_author_meta( ‘ID’ ), 40 );
Pense bien à vérifier que l’adresse e-mail de ton utilisateur WP est bien la même que tu as défini sur Gravatar.
Nicolas Maes
Le 8 août 2021
Bonjour,
Le code pour front-page et page.php à copier est entièrement vide, on ne sait pas quoi copier, ainsi que les 3 codes à copier après.
Sinon votre cours est génial, on y apprends énormément de choses !
Cordialement,
Nicolas
Maxime BJ
Le 8 août 2021
Il faut que tu vides le cache navigateur en rechargeant la page (ctrl+maj+r) et le code réapparaitra !
Mary
Le 3 septembre 2021
Bonjour,
J’ai essayé votre exemple dans la page :
if( strpos( $title, ‘Promo’ ) ) {
$title = » . $title;
}
et ça n’a pas fonctionné.
Sur la doc php et il est indiqué que la fonction peut retourner « false » et qu’il vaut mieux utiliser l’opérateur ===.
Et en effet, je pense que c’est ce qui est retourné vu que l’icône ne s’affiche pas…
En revanche, en utilisant l’opérateur ça fonctionne parfaitement.
Voilà, je voulais juste vous en informer pour les autres personnes qui souhaiteraient l’utiliser…
Merci beaucoup pour la qualité de vos cours.
Cordialement.
Mary
Maxime BJ
Le 3 septembre 2021
Oui tu as raison, je n’ai pas correctement fait le test. Je le mets à jour tout de suite et je te remercie pour ta contribution !
Alexandre
Le 29 octobre 2021
Bonjour.
Je débute avec wordpress. Je suis en stage.
Je voudrais pouvoir choisir un template et seulement un par catégorie d’article. Exemple, dans catégorie « Sorties en mer » je voudrais imposer um template avec Titre, Gallérie Images, Video et Paragraph. L’auteur ne pourra rajouter rien. Pouvez vous m’aider?
Merci et félicitations pour vos cours.
Alexandre
Maxime BJ
Le 29 octobre 2021
Du coup ce sera plutôt une configuration de l’éditeur, pas du template. Je montre comment le faire dans ce cours : https://capitainewp.io/formations/wordpress-creer-blocs-gutenberg/template-gutenberg
suzzoni
Le 19 avril 2022
Bonjour Maxime ! Merci pour cette formation très bien construite.
Je n’ai pas tout bien compris sur le template hierarchie et la boucle wp mais ça vas venir. Vous dites que le CSS n’est pas le but de la formation mais je n’ai aucunes idées de où placer mon CSS et comment l’organiser dans mon WP.
Je sais que dans un template premium comme Avada, le style.css présent dans la racine du thème n’a aucunes lignes de code donc… Ma question c’est comment organiser mon css avec du WP, les bonnes pratiques.
Maxime BJ
Le 20 avril 2022
J’en parle justement dans le prochain chapitre de la formation ! Patience donc, on abordera le chargement des scripts et des styles d’ici quelques cours.
judicael
Le 30 novembre 2022
Salut! Je voudrai afficher mes articles par groupe de quatre, je veux faire une requête qui retourne par 4 mes articles
Maxime BJ
Le 30 novembre 2022
Si tu ne veux que 4 articles, tu peux modifier la boucle WordPress grâce à un Hook, j’en parle dans ce cours :
https://capitainewp.io/formations/developper-theme-wordpress/modifier-parametres-boucle-wordpress.$
Tu pourrais n’afficher que 4 articles par exemple, ou 12 pour faire 3 lignes de 4.
Ensuite, c’est en CSS que tu feras la mise en page voulue.
Tu peux aussi créer d’autres WP Query pour requêter des données en plus de la boucle principale :
https://capitainewp.io/formations/developper-theme-wordpress/wp-query/
Sylvain
Le 9 décembre 2022
Pourquoi faire
if (cond) while(cond) … endwhile; endif;
Si la condition est constante, le if est superflu ?!
Maxime BJ
Le 9 décembre 2022
C’est un choix de la part de WordPress pour que ce soit toujours cette condition utilisée peu importe dans quel template tu te trouves.
Mais en effet, autant la boucle a un intérêt dans une page d’archive (blog par exemple), autant elle n’est pas utile dans une page standard.
Don mati
Le 15 décembre 2022
A quel moment tu abordes le style, pour l’instant mon logo n’est pas centré et les images mises en avant sont en grand format, non centrées comme sur tes copies d’écran ?
Maxime BJ
Le 15 décembre 2022
C’est dans le prochain chapitre (2B) que l’on va voir comment charger correctement les feuilles de styles et les scripts dans WordPress. Tu peux déjà aller faire un tour sur le cours correspondant :
https://capitainewp.io/formations/developper-theme-wordpress/charger-les-scripts-et-les-styles/
Julien
Le 24 février 2023
Hello,
Juste une petite remarque (sauf erreur de ma part), mais la fonction the_author() ou get_the_author() est indiqué sur le codex WP comme déprécié.
Il faut, idéalement, faire usage de get_the_author_meta() ou de the_author_meta()
Merci pour le tutoriel 🙂
Maxime BJ
Le 24 février 2023
De ce que je vois seuls les paramètres de la fonction sont dépréciés, mais pas la fonction elle-même. Tu peux donc toujours l’utiliser telle quelle : https://developer.wordpress.org/reference/functions/the_author/ Mais c’est sûr que get_the_author_meta() permet d’accéder à beaucoup plus d’informations sur l’auteur !
Julien
Le 26 février 2023
Bien vu la petite subtilité. Mes excuses.
s0uhael
Le 11 mars 2024
Au top cet article, simple et concret.
En revanche, j’utilise un constructeur de page « Salient » (type Elementor). Du coup si je construit mon post avec ce constructeur, lorsque j’affiche le contenu de mon post, les shortcodes ne sont pas interprêtés… 🙁
Est-ce possible d’avoir un affichage comme sur les pages, prenant en compte les balises du constructeur de page ?
Merci bcp 🙂
Maxime BJ
Le 11 mars 2024
Tout constructeur devrait être en mesure d’interpréter les shortcodes. Il me semble de mémoire que Salient aussi. Ça fait un petit moment que je ne l’ai pas utilisé. avec le Full site Editing natif de WordPress qui est là, je te conseille quand même de ne pas trop tarder pour migrer sur des technos plus modernes.