How to remove commenters ability to add hyperlinks to comments?

I’d like to be able to filter out a commenters ability to add hyperlinks in their comment text.

I removed the “websites” field from the mix to reduce the amount of spammage already (see: Removing the “Website” Field from Comments and Replies?“) which has helped a lot.

Read More

By default, they can use the ‘< a ‘> tag to do so in the comment box text, which allows spammers to embed hyperlinks to their sites.

Is there a way to filter out that capability in the wysiwyg editor for comment fields?

Related posts

Leave a Reply

2 comments

  1. WP runs so many prettifying filters on this stuff that it’s easy to get lost.

    Here is what I ended up with:

    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;
    }
    

    This scrubs out clearly defined links and removes filter that turns plain text links into properly tagged ones.

  2. Another solution –

    The function that will remove all <a>...</a> from a text (Probably it’s better to use strip_tags instead of regex here):

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

    Remove links from all new comments permanently, before they are insterted in the db:

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

    Or, remove links before we output them to the screen (Your theme should run the ‘comment_text’ filter somewhere in a template file):

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