web-dev-qa-db-fra.com

Comment supprimer la possibilité pour les commentateurs d'ajouter des hyperliens aux commentaires?

Je voudrais pouvoir filtrer une capacité de commentateurs pour ajouter des hyperliens dans leur texte de commentaire.

J'ai supprimé le champ "sites Web" du mélange afin de réduire déjà la quantité de courrier indésirable (voir: Suppression du champ "Site Web" de Commentaires et réponses? " ) qui a beaucoup aidé.

Par défaut, ils peuvent utiliser la balise '<a'> pour le faire dans le texte de la zone de commentaire, ce qui permet aux spammeurs d'intégrer des liens hypertexte à leurs sites.

Existe-t-il un moyen de filtrer cette capacité dans l'éditeur wysiwyg pour les champs de commentaire?

3
cpuguru

WP utilise tellement de filtres de filtrage sur cette matière qu'il est facile de se perdre.

Voici ce que j'ai fini avec:

remove_filter('comment_text', 'make_clickable', 9);
add_filter('pre_comment_content', 'strip_comment_links');

function strip_comment_links($content) {

    global $allowedtags;

    $tags = $allowedtags;
    unset($tags['a']);
    $content = addslashes(wp_kses(stripslashes($content), $tags));

    return $content;
}

Cela supprime les liens clairement définis et supprime le filtre qui convertit les liens en texte brut en liens correctement étiquetés.

8
Rarst

Une autre solution -

La fonction qui supprimera tout <a>...</a> d'un texte (il est probablement préférable d'utiliser strip_tags plutôt que regex ici):

     function strip_links($content){
       return preg_replace('/<a[^>]*>(.*)<\/a>/iU','', $content);
     }

Supprimer les liens de tous les nouveaux commentaires de manière permanente , avant qu'ils ne soient insérés dans la base de données:

     add_filter('preprocess_comment', 'new_comment_strip_links');
     function new_comment_strip_links($commentdata){
       $commentdata['comment_content'] = strip_links($commentdata['comment_content']);
       return $commentdata;
     }

Ou, supprimez les liens avant de les afficher à l'écran (votre thème doit utiliser le filtre 'comment_text' quelque part dans un fichier de modèle):

     add_filter('comment_text', 'display_comment_strip_links');
     function display_comment_strip_links($content){
       return strip_links($content);
     }
1
onetrickpony