Как автоматически удалять старые чёрные спам-комментарии в WordPress

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

Спам-комментарии — одна из самых распространённых проблем, с которыми сталкиваются владельцы сайтов на WordPress. Постоянный поток спама не только портит статистику, но и замедляет работу сайта, увеличивает размер базы данных, что в итоге может повлиять на производительность и SEO. Особенно актуальна проблема с так называемыми «чёрными» спам-комментариями — те, которые были помечены как спам, но остаются в базе данных без удаления.

Ручное удаление таких комментариев — трудоёмкий и неэффективный процесс, особенно если их тысячи. Автоматизация этой задачи позволит поддерживать базу данных в чистоте и снизить нагрузку на сервер.

В этой статье я расскажу, как с помощью простого PHP-кода и планировщика заданий WordPress (WP-Cron) организовать автоматическое удаление старых спам-комментариев, а также рассмотрим полезные плагины для улучшения работы с комментариями.

Использование WP-Cron для удаления старых спам-комментариев

Создаем функцию удаления старых спам-комментариев

Для начала нам нужна функция, которая будет искать и удалять все комментарии в статусе «spam», которым больше определённого количества дней. В примере ниже я использую 30 дней в качестве порога:

function wpmagazin_delete_old_spam_comments() {
    global $wpdb;
    $days = 30; // количество дней, старше которых удаляем
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    // Получаем ID спам-комментариев старше указанной даты
    $comments_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_date < %s",
        $date_threshold
    ));

    if (!empty($comments_to_delete)) {
        foreach ($comments_to_delete as $comment_id) {
            wp_delete_comment($comment_id, true); // true — принудительное удаление без перемещения в корзину
        }
    }
}

Эта функция использует глобальный объект $wpdb для выборки старых спам-комментариев и удаляет их с помощью стандартной функции wp_delete_comment.

Регистрация задачи в WP-Cron

Теперь нужно настроить автоматический запуск этой функции, например, раз в сутки. Для этого используем WP-Cron. Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

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

add_action('wpmagazin_daily_spam_cleanup', 'wpmagazin_delete_old_spam_comments');
<

Здесь мы создаём событие wpmagazin_daily_spam_cleanup, которое запускается ежедневно и вызывает функцию удаления спама.

Как проверить работу cron-задачи

Для отладки вы можете временно добавить логирование в функцию удаления:

function wpmagazin_delete_old_spam_comments() {
    global $wpdb;
    $days = 30;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $comments_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = 'spam' AND comment_date < %s",
        $date_threshold
    ));

    error_log('WPMagazin: Найдено к удалению спам-комментариев: ' . count($comments_to_delete));

    if (!empty($comments_to_delete)) {
        foreach ($comments_to_delete as $comment_id) {
            wp_delete_comment($comment_id, true);
        }
        error_log('WPMagazin: Удалено комментариев: ' . count($comments_to_delete));
    }
}

Логи будут записываться в debug.log, если в wp-config.php активирован режим отладки:

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

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

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

1. Akismet Anti-Spam

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

Однако Akismet не удаляет старые спам-комментарии автоматически, поэтому наш код с WP-Cron отлично дополняет его.

2. Clearfy Pro

Clearfy Pro — мощный плагин для оптимизации сайта и повышения безопасности. В нём есть функция автоматического удаления старых спам-комментариев, а также множество настроек по очистке базы данных.

Вы можете подробнее узнать о Clearfy Pro и скачать его с официального сайта.

Рекомендации по улучшению борьбы со спамом

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

  • Использовать CAPTCHA — добавляйте проверку с помощью плагинов, например, Google reCAPTCHA.
  • Ограничивать формы комментариев — например, разрешать комментировать только зарегистрированным пользователям.
  • Использовать плагины антиспама — Akismet, Antispam Bee и другие.
  • Регулярно чистить базу данных — с помощью кода и плагинов.

Автоматизация удаления старых спам-комментариев — важный шаг для поддержания здоровья сайта и снижения нагрузки на сервер.

Как отключить пагинацию в WordPress без плагинов
25.02.2026
WooCommerce: автоматическая очистка корзины и отслеживание брошенных заказов
23.04.2026
Как создать автоматический XML Sitemap в WordPress без плагинов
14.01.2026
Как удалить версии записей в WordPress чтобы уменьшить базу данных
22.11.2025
WooCommerce: как отключить категории и товары из поиска и фильтров
25.05.2026