Templates maison : Posez-moi la question n°4

Templates maison : Posez-moi la question n°4

Vendredi 23 janvier se déroulait le WordCamp Paris 2015.

Lors de ce WordCamp et comme en 2014, je tenais le Happiness Bar accompagné de Alex Concha et d’autres bénévoles désireux d’aider les visiteurs.

Question time

La toute première question de cette matinée était technique, la voici :

« Comment charger un template quand mon article a un format spécifique (post format) ? Et il faut que ça fonctionne même si je suis dans un type de contenu personnalisé (Custom Post Type, CPT) »

Voici ma réponse, sous forme de code :

<?php
add_filter( 'template_include', 'baw_hack_template_format' );
function baw_hack_template_format( $template ) {
	global $post;
	$post_types = get_post_types( array( 'public' => true ) );
	if ( is_singular( $post_types ) &&
	post_type_supports( get_post_type( $post ), 'post-formats' ) &&
	false !== ( $format = get_post_format( $post ) )
	) {
		$filename = basename( $template, '.php' );
		$file = "$filename-$format.php";
		if ( file_exists( $file ) && is_readable( $file ) ) {
			return $file;
		}
	}
	return $template;
}

Ces quelques lignes suffisent pour que WordPress supporte les templates single pour les posts format.

Explication time

Le filtre utilisé est template_include dans lequel WordPress m’envoie le chemin vers le fichier qu’il a choisi pour la page chargée.
Dans notre cas ce sera single.php dans son chemin, par exemple /home/www/wp-content/themes/twentyfifteen/single.php, ou la même chose avec un CPT comme single-cpt.php.

Mon astuce vérifie alors que nous ne sommes que dans le cas d’une page simple, la single de n’importe quel type de post, hiérarchique ou non, du moment qu’il supporte les formats et qu’il en a un assigné.

A vous d’adapter cette partie si vous ne souhaitez pas gérer les formats sur tous vos CPTs.

Ensuite je recrée la nouvelle chaîne du fichier à chercher, pour cela je ne garde que le nom du fichier sans l’extension que je concatène avec -$post-format puis l’extension .php.

Exemple pour single.php avec le format « image » :
/single.php -> /single-image.php

Exemple pour single-cpt.php avec le format « video » :
/single.php -> /single-cpt-video.php

Je vérifie ensuite que ce fichier existe, si c’est le cas, je le retourne à la place de l’ancien, j’ai filtré !

Aviez-vous déjà eu besoin de ce template ? Maintenant, vous pourrez !

Julio Potier
Consultant en Sécurité, Expert WordPress, Formateur, Marketeur et créateur du plugin de sécurité WordPress SecuPress.
Julio développe et sécurise du contenu web tous les jours. La création de plugins WordPress et la vente de produits WordPress font partie de son quotidien.

Lire la suite

Vous aimez ? Partagez !


Réagir à cet article

120 caractères maximum