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 !

Vous aimez ? Partagez !


Réagir à cet article

220 caractères maximum