[AUTOMATIQUE] Cet article a plus de 5 ans.
Il se peut donc que les informations qu'il fournit ne soient plus totalement exactes.

Aujourd’hui, je vais vous montrer comment tailler un short aux liens qui se trouvent dans vos commentaires… on va donc parler de la fonction comment_text.

 

Le problème

Je ne sais pas si vous avez déjà remarqué, mais sur beaucoup de sites « responsif », lorsqu’un visiteur colle un lien dans un commentaire, le site a tendance a mal réagir et ajoute parfois une scrollbar horizontale. Si ça n’est pas le cas, ça n’en est pas moins moche d’avoir une URL affichée en claire. C’était le cas sur bweb – ici notamment – avant que je ne me penche sur le sujet.

La raison à ce petit problème est assez simple, une URL collée dans les commentaires est nativement transformée en lien, mais une URL étant une succession de caractères sans espace (et parfois sans tirets), le navigateur l’interprète comme un seul mot et ne fait pas de retour à la ligne.

La solution est finalement assez simple, WordPress met à notre disposition le fonction comment_text. Cette dernière fait déjà l’objet de nombreux filtres que voici :

add_filter( 'comment_text', 'wptexturize' );
add_filter( 'comment_text', 'convert_chars' );
add_filter( 'comment_text', 'make_clickable', 9 );
add_filter( 'comment_text', 'force_balance_tags', 25 ); 
add_filter( 'comment_text', 'convert_smilies', 20 );
add_filter( 'comment_text', 'wpautop', 30 );

 

Pour nos besoins, nous allons donc ajouter un nouveau filtre qui va être appliqué après que les URLs aient été converties en lien. Le principe est simple, on va parser le contenu retourné par comment_text grâce à une expression régulière (REGEX) – exactement comme pour the_content – pour récupérer le lien, puis le raccourcir et en enfin créer un nouveau lien plus cours et donc moins disgracieux.

 

La solution

Pour utiliser la fonction, collez là dans le fichiers des fonctions de votre thème.

function bweb_comment_link_shortener($matches) {
    $short_url = preg_replace('~^([^/]*)/(.{5})(.{3,})(.{10})$~', '$1/$2...$4', $matches[2]);
    return '<a href="' . $matches[1] . '" target="_blank" title="URL: ' . $matches[1] . '">' . $short_url . '</a>';
}
function bweb_detect_comment_url($content) {
	$pattern= '/<a.*href=\"(https?:\/\/.*)\".*>https?:\/\/(.*)<\/a>/iU';
	$content= preg_replace_callback($pattern, 'bweb_comment_link_shortener', $content);
	return $content;
}
add_filter( "comment_text", "bweb_detect_comment_url" , 9);

 

Notez que le filtre est appliqué au chargement des commentaires et non pendant leur enregistrement, vous pourrez donc éditer/supprimer la fonction plus tard en toute transparence.

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

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