Sur le site d’un cabinet d’avocats, deux types de contenu personnalisés — « Domaines d’expertise » et « Membres de l’équipe » — devaient partager exactement la même mise en page à droite d’une biographie, mais avec un contenu de colonne latérale différent selon le cas. La première tentation a été de créer deux fichiers, single-expertise.php et single-membre.php, quasiment identiques. Une meilleure solution existait depuis WordPress 4.7 : l’en-tête Template Post Type, qui permet d’assigner manuellement un même modèle à plusieurs types de contenu.
Cette notion reste peu connue car elle vit à la croisée de deux systèmes : les modèles de page classiques, historiquement réservés aux pages, et la hiérarchie de templates automatique basée sur le nom du type de contenu.
Ce que change réellement Template Post Type
Avant WordPress 4.7, l’en-tête Template Name: ne fonctionnait que sur des fichiers destinés aux pages, sélectionnables dans le menu déroulant « Modèle » de l’écran d’édition d’une page. Il était impossible d’assigner un modèle personnalisé à un article ou à un type de contenu personnalisé de la même façon. L’ajout de la ligne Template Post Type: dans l’en-tête d’un fichier change cela : elle indique explicitement à quels types de contenu ce modèle doit être proposé.
<?php
/**
* Template Name: Fiche détaillée
* Template Post Type: post, expertise, membre
*/
get_header();
?>
Avec cet en-tête, le modèle « Fiche détaillée » apparaît dans le sélecteur de modèle de l’éditeur pour les articles, les fiches d’expertise et les fiches de membre à la fois — un seul fichier, assignable manuellement selon les besoins, plutôt que trois fichiers séparés reliés uniquement par convention de nommage.
La différence avec single-{post_type}.php

single-expertise.php s’applique automatiquement à tous les contenus du type expertise, sans aucune action de l’utilisateur : c’est la hiérarchie de templates classique de WordPress qui choisit ce fichier dès qu’il existe. Template Post Type fonctionne à l’inverse : le fichier existe, mais rien ne s’affiche automatiquement tant qu’un utilisateur ne l’a pas explicitement sélectionné dans l’éditeur pour tel ou tel contenu précis.
| Caractéristique | single-{post_type}.php | Template Post Type |
|---|---|---|
| Application | Automatique pour tout le type | Manuelle, contenu par contenu |
| Réutilisable sur plusieurs types | Non, un fichier par type | Oui, une liste de types dans l’en-tête |
| Priorité dans la hiérarchie | Standard | Prioritaire s’il est sélectionné |
Quand un modèle personnalisé est assigné à un contenu via l’écran d’édition, WordPress le fait passer avant single-{post_type}.php dans son ordre de résolution des templates. Ce comportement suit la même logique que pour les pages classiques, où un modèle personnalisé assigné prime toujours sur page.php.
Un cas d’usage concret sur les CPT du cabinet
Sur le projet du cabinet d’avocats, un seul fichier template-fiche-detaillee.php gère désormais l’affichage des expertises et des membres de l’équipe, avec une portion de code conditionnelle pour les quelques éléments réellement différents :
<?php if ( 'membre' === get_post_type() ) : ?>
<p class="fiche-fonction"><?php echo esc_html( get_post_meta( get_the_ID(), 'fonction', true ) ); ?></p>
<?php else : ?>
<p class="fiche-domaine"><?php echo esc_html( get_post_meta( get_the_ID(), 'domaine_juridique', true ) ); ?></p>
<?php endif; ?>
Toute la structure commune — colonne latérale, fil d’ariane, bloc de contact — reste écrite une seule fois, ce qui réduit fortement la duplication par rapport aux deux fichiers single-*.php initialement envisagés.
Une limite à connaître
Le principal inconvénient de cette approche tient à son caractère manuel : si un rédacteur crée une nouvelle fiche d’expertise sans lui assigner explicitement le modèle « Fiche détaillée », WordPress retombe sur single-expertise.php s’il existe, ou sur single.php à défaut, sans aucun avertissement. Sur des types de contenu à fort volume, où l’assignation manuelle systématique n’est pas réaliste, single-{post_type}.php reste préférable précisément parce qu’il s’applique sans intervention humaine.
Template Post Type convient aux cas où un même modèle doit couvrir plusieurs types de contenu à faible volume, jamais à un type de contenu produit en masse où l’automatisme de single-{post_type}.php reste indispensable.
Ce qu’il faut retenir
Disponible depuis WordPress 4.7, l’en-tête Template Post Type reste un outil de niche, mais précieux dès qu’un modèle doit être partagé volontairement entre plusieurs types de contenu à la carte, plutôt qu’appliqué automatiquement à tout un type. La hiérarchie complète des templates, avec l’ensemble de ses règles de résolution, mérite un article dédié à part entière.