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.

Lire la suite

Vous aimez ? Partagez !

Abonnement gratuit à 0€


8 thoughts on “Un template hierarchy pour cibler les pages de commentaires : Posez moi la question n°3”

  • 1
    Greg on 23 décembre 2014 Répondre
    Je valide (y) x)
  • 3
    Anonyme on 23 décembre 2014 Répondre
    Je ne connaissais pas ce hook ! Magique !
    • 4
      Julio Potier on 23 décembre 2014
      Tous les hooks permettent la magie de WordPress !!
  • 5
    Daniel Roch on 23 décembre 2014 Répondre
    Joli hook pour contourner le problème.

    Mais j’avoue que je n’en démordrai pas : cela devrait être intégrer dans le core de WordPress.

    • 6
      Julio Potier on 23 décembre 2014
      Link le ticket qui en parle ? (si non trouvé, crée le !)
  • 7
    Julien Maury on 23 décembre 2014 Répondre
    De l’inédit bien instructif merci ! Maintenant template_include c’est pour les includes à la base donc on détourne un peu mais de toute manière on fait bien ce qu’on veut et il n’existe pas de fonctions du core pour obtenir l’information que l’on souhaite.
    • 8
      Julio Potier on 23 décembre 2014
      Voilà et ce hook est fait pour toucher au chemin du template à inclure.

Laisser un commentaire

Avant de parler, merci de lire la charte des commentaires.

Utiliser le tag [php][/php] pour ajouter du code ou utilisez un service comme pastebin.com.
Cibler un commentateur avec un "@", merci à Mention Comments Authors !