Un template hierarchy pour cibler les pages de commentaires : Posez moi la question n°3

Un template hierarchy pour cibler les pages de commentaires : Posez moi la question n°3

Daniel Roch a posé cette question sur twitter avec le hashtag #WPAide, j’y réponds alors avec du code !

Template hierarchy

Le template hierarchy ou la hiérarchie des modèles de WordPress est la façon dont WordPress va choisir le fichier du thème à inclure selon la page visitée.

Par exemple un article est habituellement single.php, la page 404 est 404.php, la page d’un mot-clé est tag.php etc

Pour rappel, ce graphique (que vous devriez déjà avoir en favori) vous récapitule tous les templates possibles.

Question pour un champion

Voilà alors la question de Daniel. Il est vrai qu’en relisant le template hierarchy, il n’est pas possible de cibler les pages de commentaires, c’est à dire les articles qui paginent les commentaires.

Le template chargé pour un post restera alors single.php, et non paged.php (qui est là pour les archives uniquement) ni même autre chose.

Réponse pour un Julio

Heureusement un hook existe pour filtrer la valeur du template à inclure lorsque WordPress a fait son choix.

Nous allons l’utiliser et détourner son comportement :

add_filter( 'template_include', 'template_comment_paginated' );
function template_comment_paginated( $template )
{
	if ( (int) get_query_var( 'cpage' ) > 0 && 
		false !== ( $_template = str_replace( '.php', '-paged.php', $template ) ) &&
		file_exists( $_template ) )
	{
		return $_template;
	}
	return $template;
}

Le hook est donc template_include et je vais lire la variable cpage qui vaut vide si pas de pagination ou 1, 2 etc si les commentaires sont paginés sur cette page.

J’ajoute alors arbitrairement -paged avant l’extension, je vérifie au passage que ce fichier existe avant de le retourner.

Prenons l’exemple d’un article de blog, avec commentaires paginés, il vous faudra créer le fichier single-paged.php, qui peut être basé depuis single.php.

edit : ce code ne fonctionne pas pour le cas où vous avez single.php dans votre thème parent mais PAS dans votre thème enfant, car je vais alors chercher single-paged.php dans le parent, alors que vous l’avez mis dans le thème enfant. Idem pour un plugin, si vous mettez ce code dans un plugin avec un template paged, je ne vais pas le lire, à vous d’adapter le code pour faire ce que vous avez besoin.

Il ne vous reste plus qu’à créer ce fichier et vous aurez alors les commentaires paginés avec un template différent pour y ajouter une meta noindex par exemple.

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