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

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

Магазины на WooCommerce часто сталкиваются с ситуацией, когда устаревшие отзывы теряют актуальность или влияют на восприятие товаров. Ручное удаление отзывов занимает время и неэффективно при большом объеме. Автоматизация удаления отзывов, которым больше определенного срока, упрощает администрирование и поддерживает актуальность информации.

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

Обзор подхода

Отзывы в WooCommerce – это комментарии к товарам с типом комментария review. Для удаления устаревших отзывов нужно периодически запускать скрипт, который найдет и удалит отзывы старше нужного срока.

Использование WP-Cron для регулярного запуска удаления

WP-Cron позволит запускать функцию очистки автоматически, без вашего вмешательства.

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

// Функция удаления отзывов старше 90 дней
function wpstuff_delete_old_reviews() {
    global $wpdb;
    $days = 90; // Период хранения отзывов в днях
    $date_limit = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

    // Получаем ID отзывов старше срока
    $old_reviews = $wpdb->get_col( $wpdb->prepare(
        "SELECT comment_ID FROM $wpdb->comments
         WHERE comment_type = 'review' AND comment_date < %s",
         $date_limit
    ) );

    if ( ! empty( $old_reviews ) ) {
        foreach ( $old_reviews as $comment_id ) {
            wp_delete_comment( $comment_id, true ); // true - удаляем навсегда
        }
    }
}
add_action( 'wpstuff_daily_review_cleanup', 'wpstuff_delete_old_reviews' );

Добавление опции для настройки срока хранения отзывов

Для удобства можно добавить настройку в админке, например через add_option и использовать её в коде:

add_option( 'wpstuff_review_retention_days', 90 );

function wpstuff_delete_old_reviews() {
    global $wpdb;
    $days = (int) get_option( 'wpstuff_review_retention_days', 90 );
    $date_limit = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

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

    if ( ! empty( $old_reviews ) ) {
        foreach ( $old_reviews as $comment_id ) {
            wp_delete_comment( $comment_id, true );
        }
    }
}

Пошаговое руководство по внедрению

  1. Добавьте код функции и планировщика в файл functions.php активной темы или создайте отдельный небольшой плагин.
  2. Настройте период хранения отзывов, изменив значение в функции или добавив интерфейс для настройки в админке.
  3. Проверьте, что WP-Cron работает корректно (например, установите плагин WP Crontrol для мониторинга).
  4. Запустите функцию вручную для теста (через консоль WP-CLI или временный хук).

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

  • Проверьте в базе данных таблицу wp_comments наличие отзывов старше установленного срока (с помощью phpMyAdmin или WP-CLI).
  • Запустите вручную функцию удаления (через вызов do_action('wpstuff_daily_review_cleanup') в тестовом режиме).
  • Убедитесь, что отзывы удалились из интерфейса WooCommerce и базы данных.
  • Проверьте логи ошибок сервера и WordPress на предмет сбоев при выполнении WP-Cron.

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

  • WP-Cron не запускается: по умолчанию WP-Cron запускается при посещении сайта. Если трафика мало, задачи не выполняются. Решение – настроить системный cron на сервере для запуска wp-cron.php или использовать плагины типа WP Crontrol.
  • Удаление отзывов не происходит: проверьте правильность написания comment_type – WooCommerce использует 'review'. Ошибка в названии приведет к пустому выбору.
  • Отзывы не удаляются навсегда: используйте wp_delete_comment($id, true), иначе комментарии попадут в корзину.
  • Производительность: при большом объеме отзывов выборка и удаление могут нагружать базу. Разбейте удаление на части или добавьте ограничение по количеству удаляемых отзывов за один запуск.

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

  • Используйте параметр true в wp_delete_comment(), чтобы удалять отзывы без возможности восстановления, если вы уверены в автоматизации.
  • Для больших магазинов разбивайте удаление на порции, например, по 100 отзывов за запуск, чтобы избежать таймаутов.
  • Проверяйте права пользователя или выполняйте скрипт только от имени администратора, если добавляете интерфейс управления.
  • Для мониторинга работы используйте логи и уведомления, например, отправку email при ошибках.

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

МетодПлюсыМинусыРекомендации
WP-Cron с пользовательским кодомГибкость, контроль, нет сторонних зависимостейЗависит от посещаемости сайта, сложнее в настройкеПодходит для опытных разработчиков
Плагин с функцией удаления отзывовПростота установки и настройкиМожет быть избыточным, нагрузка на сайтДля непрофессиональных пользователей
Ручное удаление через SQL-запросыБыстро, без нагрузки WPРиск ошибок, требует доступа к базе и знаний SQLИспользовать только в крайнем случае
Как создать адаптивный шаблон WordPress с нуля
31.10.2025
Как автоматически удалять похожие посты в WordPress
10.12.2025
Очистка и оптимизация таблиц в базе данных WordPress: эффективные методы и примеры кода
08.02.2026
WooCommerce: как автоматически удалять отзывы после определённого срока
13.06.2026
Как отключить AJAX в WooCommerce без потери функциональности
21.04.2026