Диагностика проблемы: почему нужно отключать отзывы на отдельных страницах
В WooCommerce отзывы по умолчанию включены для всех товаров. Однако в ряде случаев необходимо отключить отзывы не глобально, а только на отдельных товарах или категориях. Например, для товаров без возможности комментирования, сервисов, цифровых продуктов или товаров из партнерских программ. Часто пользователи сталкиваются с задачей убрать отзывы с конкретных товаров или страниц, не отключая их полностью в настройках WooCommerce.
Пошаговое решение: отключение отзывов на отдельных страницах
1. Отключение отзывов для отдельных товаров через мета-поле
WooCommerce хранит возможность включения/отключения отзывов в мета-поле _wc_review_enabled. По умолчанию, если отзывы включены, это поле отсутствует или равно yes. Чтобы отключить отзывы для конкретного товара, можно программно добавить мета-поле с значением no.
function disable_reviews_for_specific_products( $open, $post_id ) {
// Список ID товаров для отключения отзывов
$disabled_products = array(123, 456, 789);
if ( in_array( $post_id, $disabled_products ) ) {
return false;
}
return $open;
}
add_filter( 'comments_open', 'disable_reviews_for_specific_products', 10, 2 );Этот фильтр проверяет, открыт ли комментарий (отзыв) для товара, и отключает их для заданных ID.
2. Отключение отзывов для товаров определенной категории
Если нужно отключить отзывы для всех товаров в определенной категории, можно использовать проверку категории внутри фильтра:
function disable_reviews_for_category( $open, $post_id ) {
if ( 'product' !== get_post_type( $post_id ) ) {
return $open;
}
$categories_to_disable = array( 'digital-products', 'services' );
foreach ( $categories_to_disable as $cat_slug ) {
if ( has_term( $cat_slug, 'product_cat', $post_id ) ) {
return false;
}
}
return $open;
}
add_filter( 'comments_open', 'disable_reviews_for_category', 10, 2 );3. Отключение вкладки отзывов на странице товара
Даже если комментарии отключены, вкладка с отзывами может отображаться. Чтобы её убрать, используйте фильтр woocommerce_product_tabs:
function remove_reviews_tab_for_specific_products( $tabs ) {
$disabled_products = array(123, 456);
global $product;
if ( ! $product ) {
return $tabs;
}
if ( in_array( $product->get_id(), $disabled_products ) ) {
unset( $tabs['reviews'] );
}
return $tabs;
}
add_filter( 'woocommerce_product_tabs', 'remove_reviews_tab_for_specific_products', 98 );Проверка результата после внедрения
- Перейдите на страницу товара с ID из списка и убедитесь, что форма добавления отзыва не отображается.
- Проверьте, что вкладка «Отзывы» отсутствует на странице товара.
- Для товаров без отключения отзывы должны отображаться, чтобы не нарушать логику сайта.
- Если отключение по категории — проверьте несколько товаров из отключенных и разрешенных категорий.
Частые ошибки и их исправление
- Ошибка: Отзывы всё ещё отображаются после добавления кода.
Причина: Кэширование страниц или объектов.
Решение: Очистите кэш сайта и браузера, отключите плагины кэширования на время проверки. - Ошибка: Вкладка отзывов не скрывается, хотя комментарии отключены.
Причина: Пропущена фильтрация вкладок WooCommerce.
Решение: Добавьте фильтрwoocommerce_product_tabsкак указано выше. - Ошибка: Код не работает для кастомных типов товаров или нестандартных шаблонов.
Причина: Отсутствует проверка типа поста или глобальной переменной продукта.
Решение: Добавьте проверкиget_post_type()и используйтеglobal $product.
Практические советы по производительности и безопасности
- Используйте фильтры, а не прямые изменения шаблонов, чтобы не потерять изменения при обновлении WooCommerce.
- Списки ID товаров и категорий лучше хранить в настройках темы или плагина, чтобы не менять код при изменениях.
- При большом количестве товаров используйте кеширование результатов
has_term(), чтобы снизить нагрузку на базу. - Перед внесением изменений сделайте резервную копию сайта — можно использовать Clearfy Pro для удобной очистки и оптимизации базы после удаления отзывов.
Сравнение методов отключения отзывов
| Метод | Гибкость | Сложность внедрения | Влияние на производительность |
|---|---|---|---|
Отключение через фильтр comments_open по ID товаров | Высокая | Низкая | Минимальное |
| Отключение по категории товаров | Средняя | Средняя | Среднее (зависит от количества товаров) |
| Удаление вкладки отзывов через фильтр | Высокая | Низкая | Минимальное |