Автоматическое удаление отзывов WooCommerce с помощью WP-Cron

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

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

Как работает WP-Cron в WordPress и WooCommerce

WP-Cron — внутренний планировщик задач WordPress, который запускает запланированные события при посещении сайта. За счёт этого можно создавать задачи, которые будут периодически выполняться, например, запускать функцию удаления отзывов.

Важно понимать, что WP-Cron не работает как системный cron на сервере, а зависит от трафика. Для критичных задач лучше настроить системный cron, но для удаления отзывов WP-Cron подходит.

Пошаговое решение: автоматическое удаление отзывов WooCommerce

1. Создаём функцию для удаления отзывов

Удалять будем отзывы, которые помечены как спам и старше 30 дней. Это распространённый сценарий очистки.

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

    // Получаем ID комментариев (отзывов), которые в статусе 'spam' и старше 30 дней
    $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 — удалять полностью
        }
    }
}

2. Регистрируем крон-задачу при инициализации

Добавим событие, если оно ещё не создано:

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

3. Привязываем функцию к событию WP-Cron

add_action('wpunit_delete_reviews_cron', 'wpunit_delete_old_spam_reviews');

Как проверить, что удаление работает

  1. Проверьте в базе данных наличие отзывов с comment_approved = 'spam' и датой старше 30 дней.
  2. Запустите функцию вручную для теста, вызвав wpunit_delete_old_spam_reviews() из консоли WP-CLI или временно через admin_init.
  3. Отследите логи, можно добавить запись в debug.log внутри функции удаления, например, error_log('Удалено отзывов: ' . count($comments_to_delete));.
  4. Наблюдайте, что спустя сутки (или после повторных визитов на сайт) устаревшие спам-отзывы удаляются.

Частые ошибки и как их исправить

  • Крон-событие не запускается: WP-Cron зависит от посещений сайта. Для проверки используйте WP-CLI команду wp cron event list или настройте системный cron на вызов wget -q -O - https://example.com/wp-cron.php?doing_wp_cron.
  • Удаляются не те отзывы: убедитесь, что условие comment_approved = 'spam' подходит именно для спам-отзывов, а не для всех отзывов. Возможно, нужно изменить условие или проверить кастомные статусы.
  • Большая нагрузка при удалении: удаляйте отзывы порциями, если их много, чтобы избежать тайм-аутов. Добавьте лимит в SQL-запрос и повторяйте удаление несколько раз.
  • Отсутствие прав на удаление: функция wp_delete_comment() требует прав администратора. Запускайте функцию в контексте администратора.

Практические советы по безопасности и производительности

  • Не удаляйте отзывы без резервного копирования базы данных.
  • Добавьте логирование действий для аудита.
  • Для больших магазинов с тысячами отзывов лучше использовать системный cron и делить удаление на пакеты.
  • Проверяйте, что удаление не нарушает связи в WooCommerce и комментариях.

Сравнение вариантов удаления отзывов

МетодПлюсыМинусы
Ручное удаление в админкеПростота, контрольТрудоёмко, риск пропустить спам
WP-Cron с кастомной функциейАвтоматизация, гибкость, бесплатностьЗависит от трафика, может быть нагрузка при большом объёме
Системный cron + WP-CLIНадёжность, подходит для больших сайтовСложнее в настройке, требует доступа к серверу
Плагины для очистки отзывовУдобство, готовые настройкиДополнительная нагрузка, возможны конфликты
Как использовать метод WPUnit Schedule Event для автоматизации задач в WordPress
05.01.2026
Автоматическое удаление старых мультимедиа в WordPress: практические решения
12.04.2026
Успешная авторизация WordPress с использованием REST API
18.12.2025
Как создать автономный плагин для логирования ошибок в WordPress
28.01.2026
Правильное удаление неактивных пользователей WordPress с примером кода
30.04.2026