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

Диагностика проблемы с отзывами в WooCommerce

На больших интернет-магазинах на WooCommerce отзывы клиентов могут накапливаться годами. Старые отзывы иногда теряют актуальность, особенно если товар обновлялся или изменился. Из-за большого количества комментариев база данных растет, а страницы товара загружаются дольше. Вопрос: как автоматически удалять отзывы старше заданного срока (например, 1 год) без ручной очистки?

Почему стандартных инструментов недостаточно

WooCommerce использует стандартную систему комментариев WordPress для отзывов. В админке WordPress нет фильтрации по дате комментариев с возможностью массового удаления. Плагины для управления комментариями редко имеют функцию удаления по дате с автоматизацией. Поэтому лучший подход — создать автоматизированный процесс на PHP с WP-Cron.

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

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

function wpassist_delete_old_reviews() {
    global $wpdb;
    $days = 365; // количество дней для хранения отзывов
    $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); // принудительное удаление
        }
    }
}

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

if (!wp_next_scheduled('wpassist_cron_delete_old_reviews')) {
    wp_schedule_event(time(), 'daily', 'wpassist_cron_delete_old_reviews');
}
add_action('wpassist_cron_delete_old_reviews', 'wpassist_delete_old_reviews');

3. Добавляем возможность запуска вручную для проверки

add_action('admin_post_wpassist_delete_reviews_now', 'wpassist_delete_old_reviews');

Теперь, если перейти по ссылке wp-admin/admin-post.php?action=wpassist_delete_reviews_now, функция запустится вручную.

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

  • В админке WordPress перейдите в раздел Отзывы и отсортируйте их по дате: отзывы старше указанного срока должны исчезнуть.
  • Выполните ручной запуск по ссылке выше и обновите страницу отзывов — убедитесь, что старые отзывы удалились.
  • Для проверки WP-Cron можно использовать плагин WP Crontrol — там должно отображаться событие wpassist_cron_delete_old_reviews с ежедневным запуском.

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

  • Отзывы не удаляются: Проверьте, что комментарии имеют comment_type = 'review'. Если тема или плагин используют другой тип, замените в SQL-запросе.
  • WP-Cron не срабатывает: Убедитесь, что на сайте есть посещения, которые запускают cron. Для теста используйте плагин WP Crontrol или настройте системный cron на сервере.
  • Удаление слишком агрессивное: Измените переменную $days на большее число, например 730 для двух лет.

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

  • Всегда делайте резервную копию базы данных перед автоматическим удалением данных.
  • Для больших сайтов с сотнями тысяч отзывов делайте удаление частями, чтобы не превышать лимиты памяти и времени выполнения. Например, добавьте лимит в SQL-запрос и выполняйте удаление по шагам.
  • Используйте транзакции базы данных, если доступно, или логируйте удаленные комментарии для возможности восстановления.
  • Проверяйте совместимость с плагинами кеширования и оптимизации, чтобы избежать конфликтов.

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

МетодПлюсыМинусыКомпромисс
Ручное удаление из админкиПросто, без кодаМного времени, не автоматичноПодходит для небольших сайтов
Плагин удаления комментариевУдобный интерфейсМожет не иметь фильтра по датеИспользовать с дополнительным планировщиком
Кастомный WP-Cron скрипт (как в статье)Полный контроль, автоматизацияТребует навыков PHP и понимания WP-CronЛучший выбор для крупных проектов
WooCommerce: автоматическое изменение стоимости товаров по расписанию
04.07.2026
Как настроить автоматическое сохранение данных в формах WordPress
25.01.2026
WooCommerce: Автоматическое удаление неактивных заказов по расписанию с WP-Cron
30.07.2026
WooCommerce: как добавить авторизацию заказчиков через социальные сети
20.06.2026
WooCommerce: как автоматически входить пользователя после регистрации
01.07.2026