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

Проблема: накопление устаревших отзывов в WooCommerce

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

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

Для проверки наличия устаревших отзывов выполните SQL-запрос в базе данных WordPress:

SELECT comment_ID, comment_date, comment_content FROM wp_comments WHERE comment_type = 'review' AND comment_date < NOW() - INTERVAL 365 DAY;

Здесь comment_type = 'review' фильтрует отзывы WooCommerce (если они имеют такой тип, в зависимости от темы/плагинов). Если отзывы обычные комментарии, то можно просто фильтровать по comment_post_ID — ID товара. Убедитесь, что отзывы действительно устарели и подлежат удалению.

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

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

function wpset_delete_old_woocommerce_reviews() {
    global $wpdb;
    // Удаляем отзывы старше 365 дней
    $days = 365;
    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE c FROM {$wpdb->comments} AS c
             INNER JOIN {$wpdb->posts} AS p ON c.comment_post_ID = p.ID
             WHERE p.post_type = 'product'
             AND c.comment_approved = 1
             AND c.comment_date < NOW() - INTERVAL %d DAY",
            $days
        )
    );
    if ( false === $deleted ) {
        error_log('Ошибка при удалении старых отзывов WooCommerce');
    } else {
        error_log("Удалено старых отзывов WooCommerce: $deleted");
    }
}

2. Добавляем регулярный запуск с помощью WP Cron

add_action('wpset_delete_old_reviews_cron_hook', 'wpset_delete_old_woocommerce_reviews');

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

3. Опционально: ручной запуск через административную страницу или WP-CLI

// Ручной запуск в админке через кнопку
add_action('admin_post_wpset_manual_delete_reviews', function() {
    if (current_user_can('manage_options')) {
        wpset_delete_old_woocommerce_reviews();
        wp_redirect(admin_url('edit-comments.php?post_type=product&wpset_deleted=1'));
        exit;
    }
});

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

  • Подождите запуск cron-задачи (ежедневно) или вызовите функцию вручную.
  • Проверьте количество отзывов в админке WooCommerce → Товары → Отзывы.
  • Выполните SQL-запрос из блока диагностики, чтобы убедиться, что старые отзывы удалены.
  • Проверьте debug.log (если включён) на наличие сообщений об удалении или ошибках.

Частые ошибки и причины

  • Отсутствие cron-задачи: WP Cron работает при посещении сайта. Если сайт малопосещаемый, запланированное удаление может не сработать вовремя. Используйте внешние cron или WP-CLI.
  • Неправильный фильтр отзывов: В некоторых темах отзывы могут иметь другой тип комментариев. Проверьте, что удаляются именно отзывы товаров.
  • Проблемы с правами: Функция удаления должна работать под пользователем с правами администратора.
  • Ошибки в SQL-запросе: Используйте $wpdb->prepare для безопасности и правильной подстановки переменных.

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

  • Резервное копирование: Перед автоматическим удалением создайте резервную копию базы данных.
  • Разбивка удаления: Если отзывов много, удаление за один запрос может нагружать базу. Реализуйте пакетную очистку по 100-200 записей.
  • Логирование: Включите логирование для контроля работы функции.
  • Отключение WP Cron: Если используется системный Cron, выключите WP Cron в wp-config.php через define('DISABLE_WP_CRON', true);

Сравнение вариантов реализации

МетодПлюсыМинусыПрименение
WP Cron + SQL-запрос Автоматизация, простота реализации Зависит от посещаемости сайта, нагрузка при большом объёме Средние и крупные магазины с регулярным трафиком
WP-CLI скрипт Полный контроль, можно запускать вручную/по расписанию Требуется доступ к серверу, технические навыки Магазины с доступом к серверу и системному cron
Плагины автоматической очистки Простота установки, часто есть интерфейс Может создавать нагрузку, не всегда гибкие настройки Небольшие магазины без навыков программирования
WooCommerce: очистка неиспользуемых вариаций товаров и оптимизация базы данных
01.05.2026
Как защитить WordPress от bruteforce атак с помощью кода
21.02.2026
WooCommerce: автоматическое удаление отсутствующих вариаций товаров
29.05.2026
Как удалить все неактивные пользователи в WordPress с помощью кода
10.01.2026
Как создать уникальный вид записи в WordPress с помощью кода
30.01.2026