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

Диагностика задачи: зачем и когда отключать отзывы на товары

В WooCommerce отзывы на товары включены по умолчанию, что полезно для привлечения доверия покупателей. Однако в ряде случаев нужно отключать отзывы автоматически по истечении определённого периода — например, для товаров с ограниченным сроком использования, сезонных коллекций или распродаж, когда отзывы после продажи теряют актуальность.

Без автоматизации это требует ручного отключения отзывов по каждому товару, что неудобно и приводит к ошибкам.

Пошаговое решение: автоматическое отключение отзывов по расписанию

1. Добавляем дату окончания отзывов для товара

Для управления сроками отзывов создадим метаполе _reviews_disabled_after, в котором будет храниться дата, после которой отзывы должны отключаться.

Добавим поле в админку товара через хук woocommerce_product_options_general_product_data:

add_action('woocommerce_product_options_general_product_data', function() {
    woocommerce_wp_text_input([
        'id' => '_reviews_disabled_after',
        'label' => 'Дата отключения отзывов (ГГГГ-ММ-ДД)',
        'description' => 'Отзывы будут автоматически отключены после этой даты',
        'type' => 'date',
        'desc_tip' => true
    ]);
});

Сохраняем значение метаполя:

add_action('woocommerce_process_product_meta', function($post_id) {
    if (isset($_POST['_reviews_disabled_after'])) {
        update_post_meta($post_id, '_reviews_disabled_after', sanitize_text_field($_POST['_reviews_disabled_after']));
    }
});

2. Запускаем ежедневную проверку и отключаем отзывы

Используем WP-Cron для ежедневного запуска функции, которая проверит товары с указанной датой и отключит отзывы у тех, у кого срок истёк.

add_action('wp_loaded', function() {
    if (!wp_next_scheduled('wc_disable_reviews_daily')) {
        wp_schedule_event(strtotime('00:00:00'), 'daily', 'wc_disable_reviews_daily');
    }
});

add_action('wc_disable_reviews_daily', function() {
    $today = date('Y-m-d');
    $args = [
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => [
            [
                'key' => '_reviews_disabled_after',
                'value' => $today,
                'compare' => '<=',
                'type' => 'DATE'
            ]
        ]
    ];
    $query = new WP_Query($args);

    while ($query->have_posts()) {
        $query->the_post();
        $product_id = get_the_ID();
        update_post_meta($product_id, '_comments_enabled', 'no');
        // Отключаем отзывы — отключение комментариев в WooCommerce
        // Зависит от темы и настроек, дополнительно можно отключить поддержку комментариев
        remove_post_type_support('product', 'comments');
    }
    wp_reset_postdata();
});

3. Убедимся, что отзывы отключены у нужных товаров

WooCommerce использует стандартные комментарии WordPress для отзывов, поэтому отключение комментариев у товара отключит и отзывы.

Если тема или плагин кэшируют отзывы, очистите кэш после изменений.

Проверка результата

  • В админке товара установите дату в поле «Дата отключения отзывов» на вчерашний день.
  • Запустите вручную CRON-задачу (через WP-CLI или плагин для управления WP-Cron) или дождитесь её срабатывания.
  • Откройте страницу товара на сайте — блок отзывов должен исчезнуть.
  • В админке товара проверьте, что в настройках комментариев они отключены.

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

  • Отзывы не отключаются у товаров с истекшей датой
    Проверьте, что WP-Cron работает и задача wc_disable_reviews_daily запланирована и выполняется. Для отладки используйте плагин WP Crontrol.
  • Отзывы отображаются, хотя комментарии отключены
    Проверьте кэш сайта и браузера. Очистите кэш. Также убедитесь, что тема не выводит отзывы напрямую, игнорируя стандартные комментарии.
  • Поле дата не сохраняется
    Проверьте наличие name у input и корректность $_POST данных. В нашем коде используется правильный id и сохранение в woocommerce_process_product_meta.
  • Отзывы отключаются у всех товаров
    Проверьте метазапрос и формат даты. Дата в базе и сравнение должны быть в формате Y-m-d.

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

  • Используйте WP-Cron с осторожностью: если на сайте мало трафика, задания могут не запускаться вовремя. Для критичных задач настройте системный cron на сервере.
  • Храните даты в формате Y-m-d, чтобы упростить сравнения и сортировки.
  • Удаляйте неактуальные метаданные после отключения отзывов, чтобы не засорять базу.
  • Для масштабных магазинов с тысячами товаров доработайте WP_Query с пагинацией и лимитами, чтобы не перегружать сервер.

Таблица сравнения способов отключения отзывов по расписанию

МетодОписаниеПлюсыМинусы
Ручное отключениеВыключение отзывов в настройках каждого товараПросто, не требует кодаСложно при большом количестве товаров, много ручной работы
Плагин для управления отзывамиИспользование готового плагина с функционалом расписанияУдобно, часто есть интерфейсДополнительная нагрузка, возможны конфликты, зависит от поддержки плагина
Код с WP-Cron и метаполямиАвтоматическое отключение отзывов через кастомный кодГибко, полностью под контроль, нет лишних плагиновТребует навыков разработки, нужно тестировать WP-Cron
Правильное использование WP Filter хуков для оптимальной работы WordPress
20.03.2026
WooCommerce: автоматическое изменение цен по расписанию с помощью кода
26.06.2026
WooCommerce: автоматическое очищение корзины и отключение автозакрытия заказа
12.07.2026
WooCommerce: решение проблемы с непоявлением вариаций при использовании кэширования
11.05.2026
Как удалить или отключить Emoji в WordPress для ускорения сайта
27.03.2026

Сайт в разработке, скоро здесь будет портал о WordPress.