Autoriser l’emploi de HTML dans les descriptions de catégories

Ce petit hack m’a été inspiré par une discussion sur le forum veille SEO, lancé par Hervé.

Dans sa configuration de base, WordPress n’autorise l’emploi que de quelques balises HTML seulement dans les descriptions des catégories (a, strong notamment). Cependant, dans nos réflexions de SEO, on apprécie souvent de pouvoir travailler la description des catégories, ne serait-ce que pour limiter le duplicate content. Et pour cela, on aimerait bien avoir la possibilité d’utiliser d’autres balises HTML.

Un petit bout de code à placer dans le fichier functions.php de votre thème permet de régler ce léger problème :

$filters = array('term_description','category_description','pre_term_description');
foreach ( $filters as $filter ) {
    remove_filter($filter, 'wp_filter_kses');
    remove_filter($filter, 'strip_tags');
} 

Un peu d’explications : WordPress considère les catégories comme des terms, traités de la même façon que les tags ou les taxonomies. Quand on crée ou modifie une catégorie, elle est donc soumise aux mêmes règles que n’importe quel terme. Dans des termes un peu plus techniques, les filtres term_description et pre_term_description s’appliquent de la même façon que category_description, au moment où la description est enregistrée en base de données.
Pour pousser la réflexion un peu plus loin, il suffirait d’ajouter les filtres adéquats dans l’array $filters pour pouvoir également utiliser du HTML dans les descriptions de tags ou de taxonomies.

Quant aux filtres que nous retirons, wp_filter_kses fait appel à la librairie kses pour retirer une bonne partie des balises HTML présentes dans une chaîne de caractères, en ne laissant que certaines balises autorisées (strong, a, em …).
Enfin, la fonction PHP strip_tags retire notamment le code PHP et JavaScript. Nous avions vu l’utilisation de cette fonction adaptée pour WordPress lorsque nous voulions supprimer le HTML dans les commentaires.

Avec ces 5 lignes de code, nous pouvons maintenant ajouter toutes les balises que nous voulons dans les descriptions de nos catégories. Faites vous plaisir !

Ce petit hack illustre encore une fois les larges possibilités offertes par WordPress en quelques lignes de code. Pour les plus pressés ou pour ceux qui ne souhaitent pas se pencher dans le code, sachez qu’il existe des plugins qui vous permettront de faire la même chose et ajouteront un éditeur Wysiwyg pour vous faciliter la rédaction des descriptions. N’étant pas un fervent utilisateur de plugins, je vous laisse chercher 🙂

Cet article a été publié dans WordPress par . Mettez-le en favori avec son permalien.
  • Merci beaucoup, j’étais assez frustré lors de la rédaction des descriptions. Cela ajoute-il également la possibilité d’utiliser les shortcodes ?
    En revanche je trouve risqué de supprimer le filtre des balises PHP et javascript… Il suffit qu’un utilisateur peu scrupuleux ait suffisamment de droits pour éditer une categorie, et il injectera le code qu’il veut.

  • Je n’ai pas testé la possibilité d’utiliser les shortcodes dans les descriptions.
    Concernant les scripts PHP et JavaScript, si on ne veut pas les autoriser, il suffit de ne pas ajouter la ligne « remove_filter($filter, ‘strip_tags’); » et ça devrait faire l’affaire.
    J’ai tendance à penser que dans tous les cas, il ne faut donner des permissions élevées qu’à des utilisateurs de confiance !

  • Merci pour cette astuce très utile, je peux maintenant afficher des liens dans mes catégories !
    J’aimerais cependant insérer des liens relatifs en PHP (avec « bloginfo(‘url’); ») mais même en ajoutant la ligne « remove_filter($filter, ‘strip_tags’); » cela ne fonctionne pas, ma description s’arrête net à l’endroit où j’ai placé mon code PHP. Avez-vous une solution ?
    Merci d’avance !

  • Pour permettre l’utilisation de shortcodes, on peut remplacer l’appel de la description de la catégorie dans le thème (normalement « category_description() » ) par « do_shortcode(category_description()) ».

    Quant au PHP, son exécution est interdite par défaut par WordPress pour des raisons évidentes de sécurité. La solution la plus propre serait donc d’utiliser des shortcodes dans tes descriptions de catégories.
    Pour autant, des plugins existent pour le permettre, comme http://wordpress.org/extend/plugins/exec-php/