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

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

В интернет-магазинах на WooCommerce отзывы играют важную роль, но иногда требуется их автоматическое удаление. Причины могут быть разные: устаревшие отзывы, которые не отражают текущую ситуацию, спам, или необходимость очистки базы данных для оптимизации. Встроенных средств для автоматического удаления отзывов с определённым возрастом WooCommerce не предлагает, поэтому приходится применять кастомные решения.

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

1. Создание WP-Cron задачи для регулярной проверки и удаления

Используем WP-Cron для запуска функции удаления отзывов, которым больше заданного количества дней (например, 180 дней).

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

2. Реализация функции удаления отзывов WooCommerce

Отзывы в WooCommerce хранятся как комментарии с типом review. Удаляем их, если их дата создания старше 180 дней.

function wpunit_delete_old_reviews() {
    global $wpdb;
    $days = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));

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

    if ( ! empty( $reviews ) ) {
        foreach ( $reviews as $review_id ) {
            wp_delete_comment( $review_id, true );
        }
    }
}
add_action( 'wpunit_delete_old_reviews_hook', 'wpunit_delete_old_reviews' );

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

  • Проверить дату последних отзывов в админке WooCommerce → Отзывы (Комментарии).
  • Запустить вручную функцию wpunit_delete_old_reviews() через WP-CLI или временно через вызов в шаблоне.
  • Включить логирование: добавить запись в файл лога при удалении каждого отзыва.
function wpunit_delete_old_reviews() {
    global $wpdb;
    $days = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-" . $days . " days"));

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

    if ( ! empty( $reviews ) ) {
        foreach ( $reviews as $review_id ) {
            wp_delete_comment( $review_id, true );
            error_log("Deleted review ID: " . $review_id);
        }
    }
}

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

  • WP-Cron не запускается регулярно: По умолчанию WP-Cron запускается при посещении сайта, если трафик низкий, задачи могут не выполняться. Решение – настроить системный cron на сервере или использовать плагины, например WP Crontrol.
  • Удаляются не только отзывы: Проверьте, что в запросе указано comment_type = 'review', чтобы не затронуть другие комментарии.
  • Отзывы не удаляются из-за прав доступа: Функция wp_delete_comment требует прав администратора, убедитесь, что код выполняется с необходимыми правами.

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

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

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

МетодОписаниеПлюсыМинусы
Ручное удаление в админкеУдаление через раздел комментариевПросто, без кодаТрудоёмко при большом количестве
Плагин очистки базыИспользование готовых плагиновУдобно, настройкиЗависимость от стороннего кода, нагрузка
WP-Cron + кастомный кодАвтоматизация удаления с помощью WP-CronКонтроль, гибкость, без плагиновНеобходимы навыки разработки
Как создать автоматический импорт постов в WordPress с подробным разбором
15.03.2026
Как создать автоматическое отключение плагинов при конфликтах в WordPress
04.04.2026
Как использовать REST API для автоматического создания и обновления товаров WooCommerce
20.04.2026
Как использовать метод WPUnit Schedule Event для автоматизации задач в WordPress
05.01.2026
Как автоматически проверять здоровье сайта WordPress с помощью WPUnit
16.04.2026