Chapitre 6.2 — Template tags & conditional tags
⏱️ TL;DR — Les template tags sont les fonctions qui affichent ou récupèrent des données dans un thème (
the_title,the_permalink,bloginfo,wp_nav_menu…). Les conditional tags répondent à « où sommes-nous ? » (is_single(),is_page(),is_home(),is_archive()…) pour adapter le rendu. Etget_template_part()factorise des morceaux de template réutilisables. Ensemble, ils rendent vos templates dynamiques et DRY. Règle de sécurité : toute donnée affichée doit être échappée (esc_html,esc_url,esc_attr).
🎯 Objectifs
- Utiliser les template tags d’affichage et de récupération.
- Adapter le rendu avec les conditional tags.
- Factoriser avec
get_template_part(). - Échapper correctement les sorties (aperçu sécurité, Partie 7).
1. Les template tags
Ce sont des fonctions fournies par WordPress, utilisables dans les templates. On les classe par famille :
| Famille | Exemples | Rôle |
|---|---|---|
| Contenu du post | the_title(), the_content(), the_excerpt(), the_permalink(), the_post_thumbnail() | Afficher les champs du post courant (Boucle). |
| Récupération | get_the_title(), get_permalink(), get_the_ID() | Obtenir la valeur (pour la traiter). |
| Infos du site | bloginfo('name'), home_url(), get_bloginfo('description') | Données globales du site. |
| Navigation | wp_nav_menu(), the_posts_pagination(), previous_post_link() | Menus, pagination. |
| Divers | body_class(), post_class(), language_attributes() | Classes et attributs contextuels. |
Rappel crucial (ch. 5.3) : the_ affiche, get_the_ retourne.
2. Les conditional tags : « où suis-je ? »
Ils renvoient un booléen selon le contexte de la page (déterminé par la main query, Partie 5) :
if ( is_front_page() ) { /* page d'accueil du site */ }
if ( is_home() ) { /* la page listant les articles */ }
if ( is_single() ) { /* un article seul */ }
if ( is_page() ) { /* une page seule */ }
if ( is_page( 'contact' ) ) { /* la page "contact" précisément */ }
if ( is_archive() ) { /* une liste (catégorie, tag, CPT, auteur, date) */ }
if ( is_category( 'actus' ) ) { /* l'archive de la catégorie "actus" */ }
if ( is_singular( 'livre' ) ) { /* un "livre" seul (CPT) */ }
if ( is_search() ) { /* résultats de recherche */ }
if ( is_404() ) { /* page introuvable */ }
if ( is_user_logged_in() ) { /* visiteur connecté */ }⚠️ Piège n°1 —
is_home()vsis_front_page().is_front_page()= la page d’accueil du site (quelle qu’elle soit) ;is_home()= la page qui liste les articles (le « blog »). Si l’accueil est une page statique, les deux diffèrent. Confusion classique qui casse la logique d’accueil.
⚠️ Piège n°2 — conditional tag trop tôt. Les conditional tags ne sont fiables qu’après la résolution de la main query (à partir du hook
wp/template_redirect, Partie 5). Les appeler au chargement (init,functions.phpglobal) renvoie de faux résultats. Utilisez-les dans les templates ou sur les hooks tardifs.
3. Factoriser avec get_template_part()
Pour réutiliser un morceau de template (une carte d’article, un bloc d’en-tête) sur plusieurs pages :
// Charge partials/content.php (ou content-{type}.php)
get_template_part( 'partials/content', get_post_type() );get_template_part( 'partials/content' )chargepartials/content.php.- Le 2ᵉ argument tente d’abord une variante :
get_template_part('partials/content','livre')chargepartials/content-livre.phps’il existe, sinonpartials/content.php. - On peut passer des données via le 3ᵉ argument (tableau
$args, disponible dans le partial).
// Dans un template de liste
while ( have_posts() ) : the_post();
get_template_part( 'partials/content', get_post_type() );
endwhile;💡 Pour un dev React —
get_template_part()= inclure un composant (un partial réutilisable), et la variantecontent-{type}= un rendu polymorphe selon le type de contenu (comme choisir un composant selonpost.type). Les conditional tags, eux, sont votre routing/contexte exprimé en fonctions (is_single()≈pathnameanalysé). Vous factorisez comme en React, en PHP.
4. Échapper les sorties (sécurité — aperçu)
Toute donnée affichée doit être échappée selon son contexte (règle approfondie en Partie 7) :
echo esc_html( get_the_title() ); // texte
echo '<a href="' . esc_url( get_permalink() ) . '">'; // URL
echo '<div class="' . esc_attr( $classe ) . '">'; // attribut HTMLesc_html(): texte affiché entre balises.esc_url(): URLs (href,src).esc_attr(): valeurs d’attributs HTML.wp_kses_post(): HTML riche autorisé (contenu).
⚠️ Piège n°3 — afficher sans échapper. Beaucoup de template tags natifs échappent déjà (
the_title()en grande partie), mais toute donnée que vous manipulez (métadonnée, champ custom, valeur d’URL) doit être échappée à la sortie. C’est la défense contre le XSS (Partie 7). Réflexe : « j’échappe au moment où j’affiche ».
5. Exemple : un template adaptatif
<?php get_header(); ?>
<main class="<?php echo is_front_page() ? 'home' : 'inner'; ?>">
<?php
if ( is_singular() ) {
while ( have_posts() ) { the_post(); get_template_part( 'partials/single', get_post_type() ); }
} elseif ( is_archive() || is_home() ) {
while ( have_posts() ) { the_post(); get_template_part( 'partials/card' ); }
the_posts_pagination();
} elseif ( is_search() ) {
printf( '<h1>%s</h1>', esc_html( sprintf( __( 'Résultats pour « %s »', 'mon-theme' ), get_search_query() ) ) );
// …boucle des résultats…
}
?>
</main>
<?php get_footer(); ?>✏️ Exercices
- Quelle est la différence entre
is_home()etis_front_page()? - Vous affichez le titre d’un article dans un attribut
title="…". Quelle fonction d’échappement utilisez-vous ? - Comment charger un partial différent selon le type de contenu affiché ?
✅ Solution
is_front_page()cible la page d’accueil du site (statique ou blog) ;is_home()cible la page listant les articles (le blog). Si l’accueil est une page statique, ils diffèrent.esc_attr()(échappement pour un attribut HTML) :title="<?php echo esc_attr( get_the_title() ); ?>".get_template_part( 'partials/content', get_post_type() ): il chargecontent-{type}.phps’il existe, sinoncontent.php.
🧠 Quiz de révision
1. Qu’est-ce qu’un conditional tag ?
Une fonction qui renvoie un booléen selon le contexte de la page (is_single, is_page, is_archive…), pour adapter le rendu.
2. Quand les conditional tags sont-ils fiables ?
Après la résolution de la main query (hooks wp/template_redirect, dans les templates) — pas au chargement (init).
3. À quoi sert get_template_part() ?
À factoriser et réutiliser des morceaux de template, avec une variante possible selon un suffixe (content-{type}).
4. Quelle fonction échappe une URL affichée ?
esc_url() (pour href/src) ; esc_html pour du texte, esc_attr pour un attribut.
5. the_title() vs get_the_title() ?
the_title() affiche ; get_the_title() retourne la valeur.
Chapitre suivant : Le thème enfant.