Как создать собственный плагин для автоматического удаления спама в комментариях WordPress

Спам в комментариях — одна из самых раздражающих и часто встречающихся проблем на сайтах WordPress. Хотя существует множество готовых решений и плагинов, таких как Akismet или Antispam Bee, иногда возникает необходимость создать собственный легкий плагин, который будет автоматически удалять спам без лишних зависимостей и с возможностью тонкой настройки.

Почему стоит создавать свой плагин для удаления спама в комментариях

Готовые плагины отлично справляются со своей задачей, но они могут:

  • Загружать сайт лишними функциями, которые не используются.
  • Требовать подключения к внешним сервисам (например, Akismet требует API-ключ).
  • Не подходить под специфические бизнес-правила и фильтры.

Создавая собственный плагин, вы получаете полный контроль над логикой обработки комментариев, можете оптимизировать работу и интегрировать уникальные правила, например, удалять комментарии с определёнными ключевыми словами или ссылками.

Основные шаги создания плагина для удаления спама

Структура плагина и файл подключения

Создайте папку wpscan-spam-cleaner в директории wp-content/plugins/. Внутри создайте файл wpscan-spam-cleaner.php с базовым описанием плагина:

<?php
/**
 * Plugin Name: WPScan Spam Cleaner
 * Description: Автоматический плагин для удаления спам-комментариев.
 * Version: 1.0
 * Author: WPScan.ru
 */

// Защита от прямого запуска
if (!defined('ABSPATH')) {
    exit;
}

Этот базовый каркас необходим для регистрации плагина в WordPress.

Фильтрация и удаление спам-комментариев

Для автоматического удаления спама мы можем использовать хук wp_insert_comment, который срабатывает при добавлении комментария. В обработчике мы проверим комментарий на признаки спама и при необходимости удалим его.

Пример простой проверки по наличию запрещенных слов и ссылок:

function wpscan_check_and_delete_spam_comment($comment_ID, $comment_object) {
    $spam_keywords = array('viagra', 'casino', 'loan');
    $comment_content = strtolower($comment_object->comment_content);

    foreach ($spam_keywords as $word) {
        if (strpos($comment_content, $word) !== false) {
            // Помечаем комментарий как спам и удаляем
            wp_spam_comment($comment_ID);
            wp_delete_comment($comment_ID, true);
            error_log('WPScan Spam Cleaner: удалён спам-комментарий с ID ' . $comment_ID);
            return;
        }
    }

    // Дополнительная проверка на слишком много ссылок
    preg_match_all('/https?:\/\//', $comment_content, $matches);
    if (count($matches[0]) > 2) {
        wp_spam_comment($comment_ID);
        wp_delete_comment($comment_ID, true);
        error_log('WPScan Spam Cleaner: удалён комментарий с избыточными ссылками, ID ' . $comment_ID);
    }
}
add_action('wp_insert_comment', 'wpscan_check_and_delete_spam_comment', 10, 2);

В данном примере мы определяем массив ключевых слов, которые часто встречаются в спаме, и если комментарий содержит одно из них, он удаляется. Аналогично, если в комментарии более 2 ссылок, он считается подозрительным и удаляется.

Как улучшить плагин: расширенные методы борьбы со спамом

Использование регулярных выражений для проверки контента

Проверка только ключевых слов может быть недостаточной. Регулярные выражения позволяют более гибко анализировать текст комментария. Например, можно блокировать комментарии, содержащие определённые паттерны ссылок или подозрительные email-адреса.

function wpscan_spam_regex_check($comment_content) {
    // Пример: блокируем комментарии с URL в скрытых тегах
    $pattern = '/<style>.*https?:\/\/.*<\/style>/i';
    if (preg_match($pattern, $comment_content)) {
        return true;
    }
    return false;
}

Эту функцию можно интегрировать в основную проверку, чтобы расширить возможности фильтрации.

Добавление опций и страницы настроек

Для гибкости плагина удобно добавить панель настроек в админке, где можно редактировать список ключевых слов, задавать максимальное количество ссылок в комментарии и включать/отключать автоматическое удаление.

Для этого используется API настроек WordPress:

function wpscan_spam_cleaner_menu() {
    add_options_page('WPScan Spam Cleaner', 'Spam Cleaner', 'manage_options', 'wpscan-spam-cleaner', 'wpscan_spam_cleaner_settings_page');
}
add_action('admin_menu', 'wpscan_spam_cleaner_menu');

function wpscan_spam_cleaner_settings_page() {
    if (!current_user_can('manage_options')) {
        return;
    }
    if (isset($_POST['wpscan_spam_keywords'])) {
        update_option('wpscan_spam_keywords', sanitize_text_field($_POST['wpscan_spam_keywords']));
        echo '<div class="updated">Настройки сохранены</div>';
    }
    $keywords = get_option('wpscan_spam_keywords', 'viagra,casino,loan');
    echo '<form method="post" action="">';
    echo '<h2>Настройки WPScan Spam Cleaner</h2>';
    echo '<label>Ключевые слова для спама (через запятую):</label><br>';
    echo '<input type="text" name="wpscan_spam_keywords" value="' . esc_attr($keywords) . '" size="50" /><br><br>';
    echo '<input type="submit" value="Сохранить" class="button button-primary" />';
    echo '</form>';
}

Такой подход позволяет не править код при изменении правил фильтрации.

Тестирование и отладка плагина

Очень важно тщательно тестировать плагин на тестовом сайте. Проверьте, что он корректно удаляет спам, не трогая нормальные комментарии. Для отладки используйте функцию error_log для записи действий плагина в лог сервера.

Также рекомендуем временно включить режим WP_DEBUG в WordPress для отслеживания предупреждений и ошибок:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false); // чтобы ошибки не показывались посетителям

После отладки не забудьте отключить режим.

Заключение

Создание собственного плагина для удаления спама в комментариях — отличный способ повысить безопасность и качество вашего сайта на WordPress без лишних зависимостей. Вы получите гибкость и возможность быстро адаптировать фильтры под конкретные задачи.

В статье мы рассмотрели базовую структуру плагина, простейшую фильтрацию и расширенные методы, а также добавление панели настроек для удобства управления. Используйте эти знания, чтобы сделать ваш сайт чище и комфортнее для посетителей.

Как использовать WPScan для быстрого аудита безопасности WordPress
25.01.2026
Как безопасно обновлять базу данных WordPress без потери данных
06.03.2026
Как защитить WordPress от zero-day уязвимостей и что делать после обнаружения
28.01.2026
Как удалить неиспользуемые таблицы в базе данных WordPress
12.03.2026
Как установить лимит на запросы REST API WordPress
02.04.2026