Как автоматически отключить отзывы на отдельных страницах WooCommerce

Проблема: необходимость selectively отключать отзывы на товарах WooCommerce

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

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

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

  • В админке WooCommerce в настройках «Товары» -> «Отзывы» стоит ли галочка «Включить отзывы»? Если нет – отзывы отключены глобально.
  • На странице конкретного товара в шаблоне отображается ли блок с отзывами (таб «Отзывы»)?
  • Нет ли кэширования, которое мешает увидеть изменения сразу?
  • Проверить, есть ли в теме или плагинах фильтры, которые могут переопределять вывод отзывов.

Пошаговое решение: отключение отзывов на выбранных товарах через код

Для отключения отзывов на отдельных товарах добавим фильтр, который динамически отключает комментарии для отзывов WooCommerce на основе ID товара или других условий.

1. Определяем список ID товаров, для которых нужно отключить отзывы

function wpelement_disable_reviews_for_products( $open, $post_id ) {
    $products_to_disable = array( 123, 456, 789 ); // ID товаров без отзывов
    if ( in_array( $post_id, $products_to_disable ) ) {
        return false; // закрываем отзывы
    }
    return $open;
}
add_filter( 'comments_open', 'wpelement_disable_reviews_for_products', 10, 2 );

2. Отключаем отображение вкладки «Отзывы» на страницах этих товаров

function wpelement_remove_reviews_tab( $tabs ) {
    global $product;
    $products_to_disable = array( 123, 456, 789 );
    if ( in_array( $product->get_id(), $products_to_disable ) ) {
        if ( isset( $tabs['reviews'] ) ) {
            unset( $tabs['reviews'] );
        }
    }
    return $tabs;
}
add_filter( 'woocommerce_product_tabs', 'wpelement_remove_reviews_tab', 98 );

3. Кэш и очистка

После добавления кода очистите кэш сайта и браузера. Если используется объектный кэш или плагин кэширования (например, WP Rocket, W3 Total Cache), сделайте полную очистку кэша.

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

  • Откройте страницу товара с ID из списка $products_to_disable. Вкладка «Отзывы» должна отсутствовать.
  • Попытка открыть URL с комментариями к товару (например, https://site.com/product/product-name/#reviews) не должна показывать отзывов или формы для их добавления.
  • В админке WordPress -> Комментарии не должно появляться новых отзывов для этих товаров.

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

  • Отзывы не отключаются на нужных товарах: проверьте правильность ID товаров, переданных в массив $products_to_disable. ID можно узнать в админке WooCommerce, наведя на название товара.
  • Отзывы продолжают отображаться из-за кэширования: очистите все слои кэша, включая серверный, плагин и браузер.
  • Другие плагины переопределяют вывод отзывов: временно отключите плагины, связанные с отзывами, чтобы проверить конфликт.
  • Код размещён в неверном месте: добавляйте код в файл functions.php дочерней темы или в специально созданный плагин, не меняйте ядро WooCommerce.

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

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

Сравнение способов отключения отзывов на отдельных товарах

СпособПреимуществаНедостатки
Глобальное отключение в настройках WooCommerceПростота, нет кодаОтзывы отключаются для всех товаров сразу
Использование плагина (например, Disable Comments)Управление из админкиМожет не поддерживать выборочные товары, добавляет нагрузку
Кастомный код с фильтрами (описано в статье)Гибкость, точечное отключение, минимальная нагрузкаТребуется базовый уровень PHP, нужно тестировать
Как добавить кастомную кэшировку данных в WordPress без плагинов
12.12.2025
Автоматическое удаление товаров WooCommerce при отсутствии на складе
26.04.2026
Как автоматически удалять заказы WooCommerce по статусу
03.05.2026
Как удалить старые изображения в WordPress без плагинов
19.01.2026
Создание динамического шорткода с параметрами в WordPress
16.01.2026