Диагностика задачи: зачем отключать отзывы на отдельных страницах
В интернет-магазинах на WooCommerce отзывы помогают повысить доверие и конверсию. Но бывают ситуации, когда нужно отключить отзывы на конкретных товарах или категориях. Например, товары с ограниченным сроком, услуги без отзывов или товары, которые не требуют обратной связи.
WordPress и WooCommerce по умолчанию не предлагают гибкого управления отзывами на уровне отдельных страниц, поэтому приходится использовать код или плагины.
Пошаговое решение: как программно отключить отзывы на отдельных страницах WooCommerce
1. Отключение отзывов для конкретного товара по ID
Для начала рассмотрим самый простой сценарий — отключение отзывов на товаре с заданным ID.
add_filter('comments_open', function($open, $post_id) {
$disabled_ids = array(123, 456); // Замените на ID товаров без отзывов
if (in_array($post_id, $disabled_ids)) {
return false;
}
return $open;
}, 10, 2);
Этот код нужно добавить в файл functions.php вашей дочерней темы или в кастомный плагин.
2. Отключение отзывов для категории товаров
Чтобы отключить отзывы на всех товарах в определённой категории, используйте проверку термина:
add_filter('comments_open', function($open, $post_id) {
if (is_admin()) return $open; // чтобы не мешать в админке
$disabled_categories = array('no-reviews'); // slug категории
$terms = wp_get_post_terms($post_id, 'product_cat', array('fields' => 'slugs'));
if (array_intersect($terms, $disabled_categories)) {
return false;
}
return $open;
}, 10, 2);
3. Отключение отзывов на странице товара с определённым условием (например, по метаполю)
Если нужно более гибкое управление — можно создать поле ACF или пользовательское метаполе disable_reviews и отключать отзывы по нему:
add_filter('comments_open', function($open, $post_id) {
$disable = get_post_meta($post_id, 'disable_reviews', true);
if ($disable) {
return false;
}
return $open;
}, 10, 2);
Проверка результата после внедрения
- Перейдите на страницу товара, для которого отключили отзывы.
- Прокрутите вниз к секции отзывов — она должна отсутствовать или быть недоступной для добавления новых.
- Попробуйте оставить отзыв — форма должна быть неактивной.
- На других товарах с включёнными отзывами поведение не должно измениться.
Частые ошибки и как их исправить
- Отзывы не отключаются: Проверьте, что фильтр
comments_openподключён с приоритетом не выше 10, и код загружается (без ошибок PHP). - Отзывы отключаются на всех товарах: Проверьте условия проверки ID, категорий или метаполей — возможно, они всегда возвращают true.
- Отзывы показываются в админке: Фильтр не должен блокировать комментарии в админке — добавьте проверку
is_admin(). - Кэширование мешает обновлению: Очистите кэш сайта и браузера, отключите плагин кэширования на время теста.
Практические советы по безопасности и производительности
- Добавляйте код в дочернюю тему или отдельный плагин, чтобы сохранить изменения при обновлениях.
- Используйте
is_admin()в фильтре, чтобы код не мешал работе админки. - Если у вас большой каталог, избегайте сложных запросов в фильтре
comments_open, чтобы не замедлять загрузку страниц. - Для массового редактирования товаров используйте WP-CLI или SQL-запросы для установки метаполя
disable_reviews, если выбрали такой подход.
Сравнение подходов для отключения отзывов в WooCommerce
| Метод | Простота | Гибкость | Потенциальные минусы |
|---|---|---|---|
| Отключение по ID товара | Очень просто | Низкая (только отдельные товары) | Требуется обновлять список вручную |
| Отключение по категории | Средне | Средняя (по категориям) | Нельзя отключить по другим условиям |
| Отключение по метаполю | Средне | Высокая (любые условия) | Требует дополнительной настройки метаполей |