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

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

Многие владельцы интернет-магазинов на WooCommerce сталкиваются с проблемой накопления устаревших или нерелевантных отзывов. Это приводит к снижению доверия покупателей и загромождению базы данных. Стандартный функционал WooCommerce не предусматривает автоматическое управление отзывами по времени их публикации.

Чтобы решить эту задачу, нужно реализовать механизм, который будет автоматически удалять отзывы старше определённого срока — например, 30 дней. Это позволит поддерживать актуальность отзывов и снизить нагрузку на базу данных.

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

В WooCommerce отзывы — это комментарии к товарам с типом комментариев comment_type = 'review'. Для удаления старых отзывов нам нужно выбрать комментарии с датой старше 30 дней и типом review, а затем их удалить.

Проверка отзывов через базу данных

Для диагностики можно выполнить SQL-запрос:

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

Этот запрос покажет все отзывы старше 30 дней.

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

Реализуем удаление отзывов с помощью WP-Cron, чтобы запускать задачу ежедневно.

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

function wpcoder_delete_old_woocommerce_reviews() {
    global $wpdb;
    $date_limit = date('Y-m-d H:i:s', strtotime('-30 days'));
    
    $old_reviews = $wpdb->get_col($wpdb->prepare(
        "SELECT comment_ID FROM {$wpdb->comments} WHERE comment_type = %s AND comment_date < %s",
        'review',
        $date_limit
    ));
    
    if (!empty($old_reviews)) {
        foreach ($old_reviews as $comment_id) {
            wp_delete_comment($comment_id, true); // true - принудительное удаление
        }
    }
}

Шаг 2. Добавляем WP-Cron событие для ежедневного запуска

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

add_action('wpcoder_daily_old_review_cleanup', 'wpcoder_delete_old_woocommerce_reviews');

Шаг 3. Очистка при деактивации плагина или темы

function wpcoder_clear_scheduled_old_review_cleanup() {
    $timestamp = wp_next_scheduled('wpcoder_daily_old_review_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpcoder_daily_old_review_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpcoder_clear_scheduled_old_review_cleanup');

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

Чтобы проверить, что удаление работает:

  • Выполните вручную функцию wpcoder_delete_old_woocommerce_reviews() через WP-CLI или временно вызвав её в шаблоне.
  • Проверьте базу данных — старые отзывы должны исчезнуть.
  • Создайте тестовые отзывы с датой более 30 дней назад (можно через SQL) и убедитесь, что они удаляются после запуска WP-Cron.
  • Проверьте логи сервера и WordPress на наличие ошибок.

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

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

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

  • Добавьте проверку nonce и прав доступа, если планируете запускать удаление через ajax или пользовательский интерфейс.
  • Для больших сайтов оптимизируйте выборку комментариев порционно, чтобы избежать превышения лимита памяти или времени выполнения.
  • Регулярно делайте резервные копии базы данных перед очисткой.
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpcoder.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-staryh-otzyvov-posle-30-dney) для дополнительной оптимизации базы и управления метаданными.

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

МетодОписаниеПреимуществаНедостатки
SQL-запрос вручную Удаление через прямой запрос в базе Быстро, без нагрузки на WP Риск повредить данные, требует ручного запуска
Функция на PHP + WP-Cron Автоматический скрипт на PHP с планировщиком Автоматизация, интеграция с WP Зависит от работы WP-Cron, возможны задержки
Плагин для очистки комментариев Готовое решение из репозитория WP Удобство, интерфейс Может быть избыточным, нагрузка, зависимости
Автоматическое удаление отменённых заказов в WooCommerce по сроку хранения
27.05.2026
Автоматическое удаление неиспользуемых метаполей в WordPress
22.03.2026
Успешная интеграция WooCommerce с Битрикс24 в WordPress
10.01.2026
Как удалить старые мета-поля в WordPress при удалении записи
21.02.2026
Как использовать WPRemark для автоматического сбора отзывов пользователей в WordPress
31.12.2025