WooCommerce: автоматическое удаление неактивных отзывов с помощью Cron и PHP

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

В интернет-магазинах на WooCommerce отзывы играют важную роль для доверия и продаж. Однако часто накапливаются неактивные или спам-отзывы, которые не проходят модерацию или устарели. Это приводит к:

  • Загромождению базы данных
  • Ухудшению производительности сайта
  • Потере доверия пользователей из-за спама

Если вы не удаляете такие отзывы вручную, со временем их количество может существенно вырасти. В стандартном интерфейсе WordPress нет готового инструмента для массового удаления неактивных отзывов по времени или статусу.

Пошаговое решение: удаление неактивных отзывов с помощью Cron и PHP

1. Определяем критерии неактивных отзывов

В WooCommerce отзывы — это комментарии к продуктам, у которых тип комментария comment_type равен review. Статусы комментариев:

  • approve — одобренные
  • hold — ожидающие модерации
  • spam — помеченные как спам
  • trash — удалённые

Для удаления подойдут отзывы в статусах hold и spam старше определённого срока, например, 30 дней.

2. Создаём функцию для удаления

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

function wpzen_delete_old_inactive_reviews() {
    global $wpdb;
    $days = 30; // удалять отзывы старше 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_type = %s AND comment_approved IN ('hold', 'spam') AND comment_date < %s",
        'review',
        $date_threshold
    ));

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

3. Настраиваем Cron задачу для автоматизации

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

// Регистрируем событие при активации темы/плагина
function wpzen_schedule_delete_reviews() {
    if (!wp_next_scheduled('wpzen_daily_delete_reviews_event')) {
        wp_schedule_event(time(), 'daily', 'wpzen_daily_delete_reviews_event');
    }
}
add_action('wp', 'wpzen_schedule_delete_reviews');

// Привязываем нашу функцию к событию
add_action('wpzen_daily_delete_reviews_event', 'wpzen_delete_old_inactive_reviews');

// Очистка при деактивации темы/плагина
function wpzen_clear_scheduled_delete_reviews() {
    $timestamp = wp_next_scheduled('wpzen_daily_delete_reviews_event');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpzen_daily_delete_reviews_event');
    }
}

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

  • Подождите до следующего запуска WP-Cron (обычно при посещении сайта или запустите вручную через плагин WP Crontrol).
  • Проверьте базу данных через phpMyAdmin или аналог — отзывы с comment_approved «hold» или «spam», старше 30 дней, должны быть удалены.
  • В админке WordPress в разделе Отзывы убедитесь, что старые неактивные отзывы исчезли.
  • Для отладки можно временно добавить логирование в функцию удаления, например, через error_log().

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

  • Функция не запускается автоматически: WP-Cron запускается только при посещениях сайта. Для проверки можно использовать плагин WP Crontrol и запускать событие вручную.
  • Отзывы не удаляются: Проверьте, что тип комментария действительно review. В WooCommerce это стандарт, но темы или плагины могут менять поведение.
  • Удаление происходит слишком часто или редко: Настройте интервал запуска Cron и параметр $days в функции удаления. Для частой очистки можно использовать интервал hourly вместо daily, но это увеличит нагрузку.
  • Ошибки прав доступа: Убедитесь, что PHP-скрипты имеют права на удаление комментариев и что нет конфликтов с плагинами безопасности.

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

  • Перед удалением делайте резервную копию базы данных.
  • Не увеличивайте слишком часто интервал Cron, чтобы не создавать нагрузку на сервер.
  • Если база данных очень большая, разбивайте удаление на части, например, удаляйте по 100 отзывов за раз.
  • Используйте плагин Clearfy для дополнительной очистки и оптимизации базы.

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

МетодПлюсыМинусыКомпромисс
Ручное удаление через админкуПростотаТрудозатратно, риск пропускаПодходит для небольших магазинов
Плагин для очистки отзывовАвтоматизация, удобствоМожет влиять на производительность, требует обновленийИспользуйте популярные и проверенные плагины
Кастомный PHP + Cron (как в статье)Гибкость, точное управлениеТребует навыков разработки, правильной настройкиОптимально для опытных разработчиков
Как избежать конфликтов между плагинами в WordPress
04.01.2026
Как ускорить загрузку изображений в WordPress с помощью lazy load и оптимизации
17.04.2026
WooCommerce: как правильно настроить обновление статуса заказа через вебхуки
26.04.2026
WordPress: как использовать хуки для создания настроек темы
13.02.2026
Как установить и настроить Redis кэш в WordPress для ускорения сайта
25.11.2025