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

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

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

Спам-комментарии занимают лишнее место в базе данных, увеличивают время запросов и могут повредить SEO из-за большого количества некачественного контента. Автоматическое удаление таких комментариев позволит:

  • Снизить нагрузку на базу данных.
  • Поддерживать чистоту и актуальность комментариев.
  • Упростить работу администратора — меньше ручной модерации.

Хотя существуют популярные плагины, например, Akismet, которые фильтруют спам, иногда требуется более точечное решение с автоматической очисткой.

Использование WPReg_cron для регулярного удаления спама

WordPress имеет встроенную систему планировщика задач — WP-Cron. Мы можем создать собственную задачу, которая будет запускаться раз в сутки и удалять все комментарии, помеченные как спам.

Шаг 1. Регистрируем кастомное событие WP-Cron

Добавьте следующий код в файл functions.php вашей темы или в собственный плагин:

function wpreg_schedule_spam_cleanup() {
    if ( ! wp_next_scheduled( 'wpreg_spam_cleanup_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wpreg_spam_cleanup_hook' );
    }
}
add_action( 'wp', 'wpreg_schedule_spam_cleanup' );

Этот код проверяет, есть ли уже запланированная задача, и если нет — создает её с запуском раз в сутки.

Шаг 2. Создаем функцию удаления спама

Теперь подключим функцию, которая будет удалять спам-комментарии при срабатывании задачи:

function wpreg_delete_spam_comments() {
    global $wpdb;
    // Получаем ID всех комментариев, помеченных как спам
    $spam_comments = $wpdb->get_col( "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = 'spam'" );
    if ( empty( $spam_comments ) ) {
        return; // Нет спама
    }
    foreach ( $spam_comments as $comment_id ) {
        wp_delete_comment( $comment_id, true );
    }
}
add_action( 'wpreg_spam_cleanup_hook', 'wpreg_delete_spam_comments' );

Функция напрямую обращается к базе, получает ID комментариев со статусом spam и удаляет их полностью вместе с метаданными.

Дополнительные советы по борьбе со спамом

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

  • Использовать плагин Clearfy Pro с функцией защиты от спама, которая помогает блокировать комментарии с типичными признаками.
  • Включить в форме комментариев капчу, например через плагин My Popup с поддержкой Google reCAPTCHA.
  • Ограничить возможность оставлять комментарии только зарегистрированным пользователям.

Пример добавления капчи в форму комментариев

Добавим вызов капчи в форму комментариев, если вы используете плагин My Popup с поддержкой reCAPTCHA:

function wpreg_add_recaptcha_to_comment_form() {
    echo do_shortcode('[my_popup_recaptcha]');
}
add_action( 'comment_form_after_fields', 'wpreg_add_recaptcha_to_comment_form' );

Это добавит капчу сразу после полей формы, что значительно снизит количество спам-ботов.

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

Чтобы проверить, что задача работает корректно, можно временно изменить интервал запуска с daily на hourly и вручную добавить несколько комментариев со статусом спам в базе через phpMyAdmin или вручную пометить комментарии как спам в админке.

Также можно вызвать функцию удаления напрямую для теста:

wpreg_delete_spam_comments();

После этого проверьте, что спам-комментарии исчезли из админки.

Выводы и рекомендации

Автоматизация удаления спама в комментариях с помощью WP-Cron и кастомных функций позволяет держать базу данных чистой и снижать нагрузку на сайт. В сочетании с плагинами для защиты от спама и капчей вы получите надежный комплекс защиты.

Если хотите расширить функционал — можно добавить уведомления администратору о количестве удаленных комментариев, логирование или очистку других типов мусора.

Как удалить зависшие meta поля в WordPress
13.03.2026
Как исключить товары и варианты WooCommerce по атрибуту из корзины и оформления заказа
25.05.2026
Как использовать WooCommerce хуки для настройки процесса оформления заказа
22.04.2026
Как использовать хук и фильтр post_status в WordPress для управления статусами записей
05.03.2026
Как удалить зависшие задачи в WP-Cron WordPress
19.03.2026