How to Remove Links in Posts with WordPress

Imagine you have an article submission site, where readers can generate their own content. But you want to make sure that it’s not abused with spam links. Let’s say you need to disallow all links in your content and not allow users to submit them at all. Obviously every situation will be different. But let’s look at a single scenario where we display an error whenever a user tries to submit content that contains a link.

Warn Users about Submitting Content with Links

Open up your functions.php file or plugin for custom PHP code and all the following. If you don’t know how to add code snippets in WordPress, see this tutorial.

function show_editor_message($messages) {
    global $post;
    $post_title = $post->post_content;
    $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
    if(preg_match($reg_exUrl, $post->post_content)) {
        $error_message = 'Post contains links. Please Remove them first';
        add_settings_error('post_has_links', '', $error_message, 'error');
        settings_errors( 'post_has_links' );
        $post->post_status = 'draft';
        wp_update_post($post);
        return;
    }
    return $messages;

}
add_action('post_updated_messages', 'show_editor_message');

This piece of code with throw up a warning whenever a user tries to submit a post which contains a link. Here’s a screenshot:

Remove links in posts

The post will be automatically sent back to “draft” status regardless of whether they tried to save, or publish it. This way, instead of removing links or disabling them, we give the user an opportunity to restructure their content in a natural way.

You can add several variations to this. For example, you can add the following line to the beginning of the function to allow publishing/saving by admins:

if ( current_user_can( 'manage_options' ) )
    return $messages;

This can allow you to override the default behavior. While regular users can’t submit posts with links, you can log in and do it on their behalf on a case by case basis. The nature of this solution is such that the requirements will be different each time. Perhaps you want to allow internal links, and leave out external ones. In that case, the regular expression we use for matching will change.

But this should work nicely. With the second part of the code containing the check for admins, you have the flexibility to block all links except those you want to expressly allow.

Speak Your Mind

*