Skip to Content
WordPressPartie 6 — Développer des thèmesTemplate tags & conditional tags

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. Et get_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 :

FamilleExemplesRôle
Contenu du postthe_title(), the_content(), the_excerpt(), the_permalink(), the_post_thumbnail()Afficher les champs du post courant (Boucle).
Récupérationget_the_title(), get_permalink(), get_the_ID()Obtenir la valeur (pour la traiter).
Infos du sitebloginfo('name'), home_url(), get_bloginfo('description')Données globales du site.
Navigationwp_nav_menu(), the_posts_pagination(), previous_post_link()Menus, pagination.
Diversbody_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() vs is_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.php global) 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' ) charge partials/content.php.
  • Le 2ᵉ argument tente d’abord une variante : get_template_part('partials/content','livre') charge partials/content-livre.php s’il existe, sinon partials/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 Reactget_template_part() = inclure un composant (un partial réutilisable), et la variante content-{type} = un rendu polymorphe selon le type de contenu (comme choisir un composant selon post.type). Les conditional tags, eux, sont votre routing/contexte exprimé en fonctions (is_single()pathname analysé). 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 HTML
  • esc_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

  1. Quelle est la différence entre is_home() et is_front_page() ?
  2. Vous affichez le titre d’un article dans un attribut title="…". Quelle fonction d’échappement utilisez-vous ?
  3. Comment charger un partial différent selon le type de contenu affiché ?

✅ Solution

  1. 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.
  2. esc_attr() (échappement pour un attribut HTML) : title="<?php echo esc_attr( get_the_title() ); ?>".
  3. get_template_part( 'partials/content', get_post_type() ) : il charge content-{type}.php s’il existe, sinon content.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.