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

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

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

Без автоматизации это требует постоянного ручного контроля, что неэффективно при большом количестве отзывов. Поэтому рассмотрим, как автоматизировать процесс удаления отзывов в WooCommerce на уровне кода.

Как определить, что отзывы WooCommerce — это комментарии типа «review»

В WooCommerce отзывы — это комментарии с типом comment_type = 'review'. Это важно для фильтрации и адресного удаления именно отзывов, а не обычных комментариев.

Для проверки типа комментария можно использовать SQL-запрос или WP_Query:

$args = [
    'post_type' => 'product',
    'status' => 'approve',
    'type' => 'review',
    'date_query' => [
        'before' => '6 months ago'
    ],
];
$comments = get_comments($args);

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

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

В коде темы или в собственном плагине добавьте функцию, которая будет искать отзывы старше N дней и удалять их:

function wpstuff_delete_old_woocommerce_reviews() {
    $days = 180; // количество дней, после которых отзывы удаляются
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $old_reviews = get_comments([
        'post_type' => 'product',
        'status' => 'approve',
        'type' => 'review',
        'date_query' => [
            'before' => $date_threshold
        ],
        'fields' => 'ids',
        'number' => 1000 // лимит за один заход
    ]);

    foreach ($old_reviews as $comment_id) {
        wp_delete_comment($comment_id, true); // true - принудительное удаление
    }
}

2. Регистрируем событие WP-Cron для регулярного запуска

Добавьте в functions.php или плагин следующий код для регистрации задачи:

if (!wp_next_scheduled('wpstuff_delete_old_reviews_cron')) {
    wp_schedule_event(time(), 'daily', 'wpstuff_delete_old_reviews_cron');
}

add_action('wpstuff_delete_old_reviews_cron', 'wpstuff_delete_old_woocommerce_reviews');

3. Удаляем событие при деактивации плагина или темы

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

Проверка результата после внедрения

  • Подождите 24 часа после активации крона или вручную запустите событие через WP-CLI: wp cron event run wpstuff_delete_old_reviews_cron
  • Проверьте в админке WooCommerce — раздел «Отзывы»: отзывы старше 180 дней должны быть удалены.
  • Для отладки можно добавить error_log в функцию удаления, чтобы видеть в debug.log удалённые ID комментариев.

Частые ошибки и способы их исправления

  • Отсутствие cron-события. Проверьте, что WP-Cron не отключен в wp-config.php (не должно быть define('DISABLE_WP_CRON', true);).
  • Отзывы не удаляются. Убедитесь, что комментарии имеют тип review и что дата фильтрации работает корректно (проверьте формат даты).
  • Удаление не происходит сразу. WP-Cron запускается при посещении сайта, можно принудительно выполнить через WP-CLI или плагин WP Crontrol.
  • Потеря данных. Функция использует wp_delete_comment с принудительным удалением, будьте осторожны и делайте бэкап перед внедрением.

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

  • Ограничивайте количество удаляемых отзывов за один проход (например, 1000), чтобы не перегружать сервер.
  • Используйте Clearfy Pro или аналогичные плагины для оптимизации WP-Cron и управления автозапусками.
  • Перед удалением создавайте резервные копии базы данных или экспортируйте отзывы для восстановления при необходимости.
  • Для сайтов с большим трафиком используйте системный cron вместо WP-Cron для более точного и надёжного запуска задач.

Сравнение методов автоматического удаления отзывов

МетодОписаниеПлюсыМинусы
WP-Cron с кастомной функциейАвтоматическое удаление отзывов через кодГибкость, контроль, бесплатноЗависит от посещаемости сайта, возможны задержки
Плагины для управления отзывамиУправление отзывами с интерфейсомУдобство, дополнительные функции модерацииМожет быть платным, лишний функционал
Системный Cron + WP-CLIЗапуск WP-CLI скриптов через системный cronНадёжность, точность запускаТребует доступа к серверу, знание SSH
Как удалить неиспользуемые таксономии в WordPress: практическое руководство с примерами кода
24.03.2026
Как экспортировать и импортировать настройки WooCommerce с помощью кода
03.05.2026
Автоматическое удаление неактивных пользователей WordPress
27.03.2026
Как создать динамические виджеты в WordPress
18.11.2025
Как создать собственный плагин оптимизации базы данных WordPress
31.01.2026