Как автоматически удалять отзывы WooCommerce со статусом «На модерации»

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

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

Проверить количество отзывов на модерации можно в админке WordPress: Отзывы > Все отзывы, затем фильтр по статусу «Ожидает проверки». Или через SQL запрос:

SELECT COUNT(*) FROM wp_comments WHERE comment_approved = '0' AND comment_type = 'review';

Если число отзывов на модерации постоянно растёт, есть смысл их автоматически удалять через заданный период.

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

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

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

function wp_delete_old_pending_reviews() {
    global $wpdb;
    // Удаляем отзывы, которые в статусе pending и старше 7 дней
    $days_old = 7;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));

    $reviews_to_delete = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT comment_ID FROM $wpdb->comments WHERE comment_approved = '0' AND comment_type = 'review' AND comment_date < %s",
            $date_threshold
        )
    );

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

2. Настраиваем cron задачу для регулярного запуска

Добавьте хук для планировщика WordPress:

add_action('wp_delete_pending_reviews_event', 'wp_delete_old_pending_reviews');

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

Этот код запустит удаление отзывов ежедневно. Если хотите изменить период, замените 'daily' на 'hourly' или 'twicedaily'.

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

  • В админке перейдите в раздел Отзывы и проверьте, уменьшилось ли количество отзывов в статусе «На модерации».
  • Для более точной проверки используйте SQL-запрос:
SELECT COUNT(*) FROM wp_comments WHERE comment_approved = '0' AND comment_type = 'review';

Запускайте скрипт вручную, вызвав функцию через WP-CLI:

wp eval 'wp_delete_old_pending_reviews();'

Если отзывы старше 7 дней удалились, значит всё работает корректно.

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

  • Отзывы не удаляются — проверьте, что в базе таблица wp_comments содержит отзывы с comment_type = 'review'. В некоторых версиях WooCommerce тип может отличаться (например, «comment»). В этом случае замените условие в запросе.
  • Крон-задача не запускается — убедитесь, что на вашем сайте посещения активны, так как WP-Cron зависит от трафика. Для теста можно запустить вручную через WP-CLI или плагин WP Crontrol.
  • Удаление отзывов влияет на рейтинг — удостоверьтесь, что удаляете только отзывы с модерацией, а не опубликованные. В коде фильтр по comment_approved = '0' гарантирует это.

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

  • Всегда делайте резервную копию базы данных перед внедрением автоматического удаления данных.
  • Если база очень большая, используйте пакетное удаление, чтобы избежать таймаутов:
foreach (array_chunk($reviews_to_delete, 50) as $chunk) {
    foreach ($chunk as $comment_id) {
        wp_delete_comment($comment_id, true);
    }
    sleep(1); // пауза 1 секунда
}
  • Для улучшения производительности используйте плагин WP Crontrol для мониторинга и ручного запуска cron-задач.
  • Если вы используете WPShop, можно интегрировать это решение с их плагином Clearfy Pro, который оптимизирует базу и может помочь с очисткой лишних данных.

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

МетодПлюсыМинусыРекомендации
Ручное удаление в админке Простота, нет кода Трудозатратно при большом количестве отзывов Подходит для редких случаев
Автоматизированный скрипт с WP-Cron Автоматизация, экономия времени Зависимость от WP-Cron, нужна базовая настройка Лучший вариант для регулярной очистки
Плагины очистки базы данных Дополнительные функции оптимизации Могут быть избыточными, риск удаления нужных данных Используйте с осторожностью, делайте бэкапы
Удаление зависимых от плагинов данных после их удаления в WordPress
27.04.2026
Как создать настройку темы WordPress своими руками
22.11.2025
Как сделать автоматический импорт продуктов в WordPress из CSV
11.12.2025
Автоматическое удаление незавершённых заказов WooCommerce с помощью cron
07.07.2026
Как использовать хуки WooCommerce для кастомизации поля оплаты
14.05.2026