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

Почему нужно автоматически отключать отзывы в WooCommerce

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

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

Если в WooCommerce отзывы остаются открытыми постоянно, можно столкнуться с проблемами:

  • Появление нерелевантных отзывов на устаревшие товары
  • Увеличение времени модерации комментариев
  • Негативные отзывы спустя длительное время после покупки, что искажает репутацию

Проверить, включены ли отзывы на товары, можно в админке WordPress в разделе Настройки > Обсуждение или непосредственно у каждого товара в метабоксе отзывов.

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

1. Создание пользовательского поля с датой отключения

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

2. Функция для проверки и отключения отзывов

Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

function wc_disable_reviews_after_date() {
    if ( ! is_product() ) {
        return;
    }
    global $product;
    $product_id = $product->get_id();
    $disable_date = get_post_meta( $product_id, '_reviews_disable_date', true );

    if ( ! $disable_date ) {
        return; // Дата отключения не установлена
    }

    $current_date = current_time( 'Y-m-d' );
    if ( $current_date >= $disable_date ) {
        remove_post_type_support( 'product', 'comments' );
        add_filter( 'comments_open', '__return_false', 20 );
    }
}
add_action( 'wp', 'wc_disable_reviews_after_date' );

Этот код проверяет дату, сохранённую в метаполе _reviews_disable_date, и если текущая дата равна или больше — отключает отзывы на товар.

3. Автоматическое назначение даты отключения при публикации заказа

Чтобы автоматизировать процесс, можно задавать дату отключения отзывов автоматически — например, через 30 дней после покупки товара. Добавьте этот код:

function wc_set_reviews_disable_date_on_order_completed( $order_id ) {
    $order = wc_get_order( $order_id );
    if ( ! $order ) {
        return;
    }

    foreach ( $order->get_items() as $item ) {
        $product_id = $item->get_product_id();
        $disable_date = get_post_meta( $product_id, '_reviews_disable_date', true );
        if ( $disable_date ) {
            continue; // Уже есть дата
        }

        // Устанавливаем дату через 30 дней от дня заказа
        $order_date = $order->get_date_created();
        if ( ! $order_date ) {
            continue;
        }

        $new_disable_date = $order_date->date( 'Y-m-d' );
        $new_disable_date = date( 'Y-m-d', strtotime( $new_disable_date . ' +30 days' ) );

        update_post_meta( $product_id, '_reviews_disable_date', $new_disable_date );
    }
}
add_action( 'woocommerce_order_status_completed', 'wc_set_reviews_disable_date_on_order_completed' );

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

Чтобы удостовериться, что отзывы отключаются корректно:

  • Проверьте, что у товара в метаполе _reviews_disable_date стоит дата через 30 дней после даты заказа
  • Откройте страницу товара на фронтенде в разные даты (можно менять системное время или использовать отложенный тест)
  • Убедитесь, что при достижении этой даты форма для добавления отзыва не отображается и комментарии закрыты
  • Проверьте, что до наступления даты отзывы доступны

Частые ошибки и способы их исправления

  • Отзывы не отключаются после даты: возможно, тема или плагины переопределяют поддержку комментариев. Проверьте, не вызывается ли comments_open с приоритетом выше 20.
  • Дата отключения не сохраняется: убедитесь, что метаполе _reviews_disable_date правильно добавлено и обновлено. Проверьте права пользователя и работу хука woocommerce_order_status_completed.
  • Отзывы отключаются на всех товарах сразу: проверьте, что функция отключения отзывов вызывается только на странице товара is_product(), а не глобально.

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

  • Для производительности лучше кэшировать результаты проверки дат и не выполнять лишние операции при загрузке страниц.
  • Обновление метаполей при каждом заказе может привести к гонкам данных — убедитесь, что дата задаётся один раз и корректно.
  • Для безопасности не храните дату в открытом виде — используйте стандартные функции WordPress для работы с метаданными.

Сравнение подходов к отключению отзывов в WooCommerce

МетодПлюсыМинусы
Плагин автоматического отключения отзывовПростота установки, готовый интерфейсМожет перегружать сайт, лишний функционал
Кастомный код с датой в метаполеТочный контроль, лёгкость кастомизацииТребуется разработка, возможны конфликты с темой
Ручное отключение отзывов на товареПросто и быстроНепрактично для большого каталога
Как удалить неиспользуемые теги в WordPress
11.02.2026
WooCommerce: автоматическое удаление заказов по статусу и срокам без плагинов
19.06.2026
WooCommerce: решение проблемы с непоявлением вариаций при использовании кэширования
04.06.2026
WooCommerce: как автоматически отключать отзывы на товары по расписанию
15.07.2026
WooCommerce: автоматическое удаление заказов по статусу и срокам
17.05.2026

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