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

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

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

Пошаговое решение: как настроить удаление отзывов старше N дней

1. Определяем срок удаления

Для примера возьмём удаление отзывов, которые старше 180 дней. Значение можно изменить под свои нужды.

2. Создаём функцию для удаления устаревших отзывов

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

function wpstuff_delete_old_reviews() {
    global $wpdb;
    $days = 180; // срок в днях
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

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

    if (!empty($old_reviews)) {
        foreach ($old_reviews as $comment_id) {
            wp_delete_comment($comment_id, true); // true — полное удаление
        }
    }
}

3. Добавляем крон-задачу для регулярного запуска

Чтобы функция запускалась автоматически (например, раз в сутки), используем WP-Cron:

if (!wp_next_scheduled('wpstuff_daily_delete_old_reviews')) {
    wp_schedule_event(time(), 'daily', 'wpstuff_daily_delete_old_reviews');
}
add_action('wpstuff_daily_delete_old_reviews', 'wpstuff_delete_old_reviews');

4. Очистка расписания при деактивации (если создан плагин)

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

function wpstuff_deactivate_plugin() {
    $timestamp = wp_next_scheduled('wpstuff_daily_delete_old_reviews');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpstuff_daily_delete_old_reviews');
    }
}
register_deactivation_hook(__FILE__, 'wpstuff_deactivate_plugin');

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

  • Проверьте в базе данных таблицу wp_comments наличие отзывов старше 180 дней (comment_type = 'review').
  • После запуска крона (можно вручную вызвать функцию wpstuff_delete_old_reviews() через консоль WP-CLI или временно добавить вызов в functions.php) убедитесь, что соответствующие отзывы удалены.
  • Просмотрите раздел отзывов в админке WooCommerce — устаревшие отзывы должны исчезнуть.
  • Логи сервера или плагина Debug Bar помогут отследить выполнение функции.

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

  • Отзывы не удаляются: проверьте, что комментарии действительно имеют comment_type = 'review'. Если отзывы имеют другой тип (например, пустое поле), исправьте условие WHERE comment_type = 'review' на comment_type = '' или уберите фильтр.
  • Крон-задача не запускается: WP-Cron зависит от посещаемости сайта. Для теста вызовите функцию вручную или настройте системный cron для вызова wp-cron.php.
  • Удаляются не те отзывы: убедитесь, что дата сравнивается с полем comment_date и формат даты совпадает.
  • Ошибка при вызове wp_delete_comment: проверьте, что функция вызывается в правильном контексте, без конфликтов с другими плагинами.

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

  • Используйте транзишены или опции для кэширования результата запроса, если отзывов очень много, чтобы не создавать нагрузку на базу при каждом запуске.
  • Ограничьте удаление пакетами по 50–100 отзывов за раз, чтобы избежать таймаутов.
  • Включите логирование удаления для аудита и отката в случае ошибок.
  • Для крупных магазинов рассмотрите выполнение удалений через WP-CLI команду, вызываемую по cron, чтобы снизить нагрузку на HTTP-запросы.
  • Проверяйте права пользователя и контексты выполнения, чтобы избежать удаления отзывов неавторизованными процессами.

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

МетодПлюсыМинусы
Собственный код с WP-CronГибкость, контроль, отсутствие лишних плагиновНужно писать и тестировать, возможны ошибки в коде
Плагин для очистки комментариев (например, WP-Optimize)Простота установки, поддержка интерфейсаМенее гибкие настройки по срокам, дополнительная нагрузка
Удаление вручную через админкуПростота, не требует знаний кодаТрудоёмко, риск пропуска отзывов, нет автоматизации
Как создать автоматический импорт контента в WordPress с помощью WP REST API и плагинов
05.02.2026
Исправление дублирующихся SKU в WooCommerce: поиск и устранение ошибок
28.04.2026
Как экспортировать и импортировать настройки WooCommerce с помощью кода
03.05.2026
Как создать многоуровневую навигацию в WordPress с примерами кода
18.02.2026
Как безопасно выполнять пользовательский PHP код в WordPress
21.03.2026