Get “a better” excerpt pour WordPress

La problématique

Lors du développement de mon thème WordPress, j’ai utilisé la fonction native get_the_excerpt() afin d’afficher un extrait du contenu de chaque article affiché dans les listes des pages index.php, front-page.php et archive.php.

Pendant la rédaction d’un article sous WordPress, il est possible d’utiliser un champs dédié à l’écriture d’un extrait de son contenu. La fonction get_the_excerpt() se charge de collecter ce résumé et s’il n’existe pas, elle extrait automatiquement environ 300 des premiers caractères de l’article, en prenant soin de ne pas tronquer les mots.

On peut considérer que cette fonction fait parti du socle fonctionnel de WordPress puisque la vocation première de ce logiciel est de proposer un blog. Ainsi, je m’attendais à ce que cette fonction offre certains paramétrages afin de personnaliser le contenu renvoyé. Ce n’est pas le cas mais le plus surprenant est que le contenu du résumé automatique renvoyé utilise indistinctement toutes les balises enregistrées. Ce qui a pour effet de rendre le texte potentiellement sybillin. Par exemple, un titre sans ponctuation peut se retrouver associé à une phrase en en altérant le sens global.

Étant donné la suprématie toujours actuelle et la longue existence de près de 20 ans de WordPress sur le Web, je suis surpris que cette fonction simple mais essentielle demeure aussi pauvre.

Après une brève exploration des moteurs de recherche, je n’ai trouvé que des explications au sujet de l’usage ou des plugins relatifs à la fonction get_the_excerpt(). Une autre recherche rapide sur Stackoverflow, GitHub et la documentation WordPress ne m’a pas permis de trouver de script permettant de réaliser ce que je souhaitais mais peut-être n’ai-je pas cherché assez profondément.

Ma proposition

Par conséquent, je me suis attaché à écrire un script personnel permettant :

  • de potentiellement contrôler la chaîne HTML depuis laquelle réaliser l’extrait. Je ne sais pas si cela est réellement utile mais pourquoi pas ? Par défaut, il s’agit de la variable $post->post_content.
  • de contrôler le nombre minimal de caractères à afficher dans l’extrait sans tronquer de mots et en ajoutant une ellipse en fin de chaîne si le contenu d’origine dépasse le nombre de caractères indiqués. En cela, je n’apporte rien à la fonction de départ. Il s’agit juste de préserver ce dispositif.
  • de proposer une liste de type de balises HTML à filtrer du contenu source. Par exemple, tous les titres H2, toutes les balises script ou style.
  • de proposer une liste de balises HTML, identifiées par leurs classes, à retirer également du contenu. Dans mon cas, j’avais un paragraphe de texte lié à l’incorporation d’une iframe Codepen que je ne souhaitais pas voir apparaître dans un extrait et mon seul moyen de l’identifier était de repérer son nom de classe CSS.
  • le choix de n’afficher que les balises de type paragraphe dans l’extrait afin de s’assurer qu’aucune autre balise ne puisse interférer dans l’intelligibilité de l’extrait. Ce paramètre peut s’avérer redondant avec les deux précédents et fait l’impasse sur l’éventuelle présence de balise <span> nécessaires à la compréhension du texte. C’est pourquoi je l’ai rendu optionnel.

Ce script s’ajoute simplement au fichier functions.php du thème WordPress. Pour plus d’informations au sujet de son usage, consulter la page GitHub correspondante. J’espère qu’il sera utile à d’autres que moi.

Consulter get_a_better_excerpt pour WordPress sur gitHub : https://github.com/seangoogoo/get_a_better_excerpt

CodePHPWordPress

Aucun commentaire

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *