Autoriser le code dans les commentaires WordPress

02 Novembre 2010

WordPress est aujourd'hui le logiciel de blog le plus répandu sur internet, mais de nombreuses petites fonctions triviales manquent. Par exemple dans les commentaires d'un article, au lieu d'encoder le contenu en entité HTML, WordPress supprime le contenu qu'il juge "dangereux". Voyons voir comment conserver le code inséré dans les commentaires de son blog...

Je ne parviens pas à comprendre pourquoi WordPress ne le gère pas par défaut, ajouter la possibilité de commenter un article avec du code est facilement réalisable. Il suffit d'ajouter le code suivant dans votre fichier functions.php de votre thème.

add_filter('pre_comment_content', 'encode_code_in_comment');
function encode_code_in_comment($source) {
  $encoded = preg_replace_callback('/<code>(.*?)<\/code>/ims',
  create_function(
    '$matches',
    '$matches[1] = preg_replace(
        array("/^[\r|\n]+/i", "/[\r|\n]+$/i"), "",
        $matches[1]);
      return "<pre>" . htmlentities($matches[1]) . "</ pre>";'
  ),
  $source);
  if ($encoded)
    return $encoded;
  else
    return $source;
}

Ainsi lorsqu'un de vos commentaires contiendra du code, le contenu que WordPress supprimait auparavant sera html encodé et donc visible dans les commentaires. Par exemple si un de vos commentaires contient une balise pre :

<?php
echo "hello commenters";
?>

Alors le contenu de la balise sera encodé de la manière suivante et il apparaitra normalement dans les commentaires :

&lt;?php
echo "hello commenters";
?&gt;

J'ai pris le parti d'utiliser la balise pre plutôt que la balise code, car c'est celle que j'utilise par défaut et elle permet de conserver toutes les caractéristiques du texte, saut de ligne, espace... Ainsi il faut avertir les personnes qui vont écrire un commentaire qu'il faut qu'ils encapsulent leur code dans cette balise.

En conclusion, cette petite fonction est fort sympatique pour un blog qui partage fréquemment du code, les commentaires ne seront plus altérés par WordPress. Si vous ne vous sentez pas de modifier votre fichier functions.php, il existe même un plugin qui s'occupera de faire exactement le même traitement. N'hésitez pas à tester vous même la fonction sur mon blog...

Source : Automatically Escape HTML Entities of Code Fragments in Comments [EN]

Charger les commentaires…