Когда и зачем отключать отзывы для отдельных товаров в WooCommerce
В стандартном WooCommerce отзывы включены для всех товаров. Но в реальных проектах часто требуется отключить отзывы только для определённых товаров — например, для цифровых товаров, сервисов или товаров, к которым отзывы неуместны. Решение должно быть точечным, чтобы не отключать отзывы глобально.
Диагностика проблемы: отзывы отображаются там, где не нужны
Если вы обнаружили, что у некоторых товаров включены отзывы, хотя их быть не должно, проверьте настройки и активные хуки. В WooCommerce отзывам отвечает вкладка reviews в шаблоне single-product/review.php, а их отображение контролируется через опцию 'comments_open'.
Проверьте также, не активированы ли глобальные плагины или функции, которые включают отзывы для всех товаров без исключения.
Пошаговое решение: как отключить отзывы для отдельных товаров через functions.php
Добавим фильтр, который отключит комментарии (отзывы) только для товаров с определённым условием. Например, отключим отзывы для товаров с определённой категорией или меткой.
add_filter('comments_open', 'disable_reviews_for_specific_products', 10, 2);
function disable_reviews_for_specific_products($open, $post_id) {
if (get_post_type($post_id) === 'product') {
// Пример: отключаем отзывы для товаров категории "digital"
if (has_term('digital', 'product_cat', $post_id)) {
return false;
}
// Можно добавить другие условия, например, по меткам или ID товаров
// if (has_term('no-reviews', 'product_tag', $post_id)) {
// return false;
// }
}
return $open;
}Этот код проверяет, открыт ли комментарий для товара, и отключает его, если товар относится к категории digital.
Как проверить, что отзывы отключены
- Откройте страницу товара из категории
digital. - Проверьте, что блок с отзывами отсутствует.
- Попробуйте перейти по прямой ссылке на отзывы — они должны быть закрыты для комментирования.
- Для товаров из других категорий отзывы должны работать как обычно.
Расширение решения: отключение отзывов по ID товара или метке
Иногда удобнее отключать отзывы для конкретных товаров по ID:
add_filter('comments_open', 'disable_reviews_by_product_ids', 10, 2);
function disable_reviews_by_product_ids($open, $post_id) {
$disabled_ids = array(123, 234, 345); // ID товаров
if (get_post_type($post_id) === 'product' && in_array($post_id, $disabled_ids)) {
return false;
}
return $open;
}Или по меткам:
add_filter('comments_open', 'disable_reviews_by_product_tag', 10, 2);
function disable_reviews_by_product_tag($open, $post_id) {
if (get_post_type($post_id) === 'product' && has_term('no-reviews', 'product_tag', $post_id)) {
return false;
}
return $open;
}Чек-лист для отключения отзывов на отдельных товарах
- Определить условие отключения (категория, метка, ID товара).
- Добавить фильтр
comments_openв functions.php или в кастомный плагин. - Проверить, что отзывы отключены на нужных товарах.
- Убедиться, что на остальных товарах отзывы работают.
- Очистить кеш сайта и браузера для корректного отображения.
Частые ошибки и как их исправить
- Отзывы не отключаются: Возможно, другой плагин или тема переопределяет шаблон отзывов. Проверьте наличие переопределений в папке темы
woocommerce/single-product/review.php. - Отзывы отключены глобально: Проверьте, не включена ли глобальная опция отключения комментариев в настройках WordPress или WooCommerce.
- Кеширование мешает проверить изменения: Очистите кеш плагинов (например, WP Super Cache, W3 Total Cache) и браузера.
- Код добавлен вне functions.php: Убедитесь, что код добавлен в файл темы
functions.phpили в кастомный плагин, и что он выполняется.
Практические советы по безопасности и производительности
- Добавляйте кастомный код в дочернюю тему или собственный плагин, чтобы избежать потери при обновлениях.
- Минимизируйте количество сложных условий в фильтре
comments_open, чтобы не замедлять загрузку страниц товаров. - Для очень большого каталога можно использовать transient-кеширование результатов проверки условий
has_term, чтобы уменьшить нагрузку на базу данных.
Таблица сравнения вариантов отключения отзывов
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
Фильтр comments_open с условиями | Легко настраивается, гибко | Нужно прописывать условия вручную | Точное отключение для выбранных товаров |
| Отключение отзывов через настройки WooCommerce | Просто, без кода | Глобально для всех товаров | Если отзывы не нужны на сайте вообще |
| Плагины для контроля отзывов | Интерфейс, расширенный функционал | Дополнительная нагрузка, возможны конфликты | Если нужно много условий и управление через админку |