Tandis que j’étais en train d’ajouter une fonctionnalité pour le site d’un client j’ai trouvé que j’avais besoin de remplacer le template qui WordPress me propose par défaut par celui-ci que je venais de créer. Si cela nous arrive, quelles sont les options que nous avons ?
Ajouter le fichier du template dans le thème
Comment peut-on forcer WordPress à charger notre template ? Normalement nous pouvons tirer profit de la hiérarchie WP pour créer un fichier qui correspond à ce qu’il doit montrer.
Par exemple, si nous avons crée un CPT ou custom post type pour lister notre collection de livres qu’on a appelé « livre », peut-être qu’on veut faire une mise en page un peu différent.
Selon la manière habituelle d’agir il va voir qu’il doit lister une « Singular Page », tout suit il verra qu’il s’agit d’une « single post page » basée sur un « custom post », et alors il va chercher le fichier « single-livre.php ». Comme il ne le trouve pas chargera « single.php ». Dans ce cas il fais la mise en page habituelle pour un article.
La première option est simple, nous pouvons créer notre template, le nommer « single-livre.php » et le placer dans le dossier du thème.
La contrainte est que nous devons placer ce fichier dans ce dossier et cela se fait manuellement.
Charger le fichier du template depuis notre plugin
Bah alors, comment forcer le remplacement du template en laissant le fichier dans le dossier de notre extension ?
Pour inclure un template sur WordPress nous pouvons employer le filtre template_include. Quand Worpress charge ce filtre il a déjà chargé la page, alors on peut tirer profit de ça pour mettre des conditions selon la page dont vous êtes.
Alors nous créons un dossier dans notre extension qu’on appel « templates ». C’est là qu’on va mettre le fichier avec le template « single-livre.php ».
Après nous devons insérer cette fonction dans le fichier principal de l’extension :
function dmkt_plugin_template( $page_template ) {
if( is_singular('itineraires') ) {
$page_template = dirname( __FILE__ ) . '/templates/single-itineraires.php';
}
return $page_template;
}
add_filter( 'template_include', 'dmkt_plugin_template', 99 );
De cette façon nous pouvons forcer WordPress à charger un template qui reste dans le dossier de notre extension sans besoin de le mettre dans le dossier du thème.