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

Проблема: отзывы WooCommerce мешают на определённых товарах

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

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

Чтобы понять, активны ли отзывы на странице товара, откройте страницу редактирования товара в админке WordPress. В блоке Настройки продукта во вкладке Общие есть чекбокс «Включить отзывы». Если убрать его, отзывы не отображаются, но это ручное действие для каждого товара.

Если отзывы показываются там, где не нужны, значит, либо чекбокс включён, либо тема/плагин принудительно их выводит.

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

1. Добавляем мета-поле для отключения отзывов

Чтобы управлять отзывами выборочно, добавим мета-поле disable_reviews с чекбоксом на странице редактирования товара.

function add_disable_reviews_meta_box() {
    add_meta_box('disable_reviews_box', 'Отключить отзывы', 'disable_reviews_meta_box_callback', 'product', 'side');
}
add_action('add_meta_boxes', 'add_disable_reviews_meta_box');

function disable_reviews_meta_box_callback($post) {
    wp_nonce_field('disable_reviews_nonce_action', 'disable_reviews_nonce');
    $value = get_post_meta($post->ID, '_disable_reviews', true);
    echo '<label><input type="checkbox" name="disable_reviews" value="yes" ' . checked($value, 'yes', false) . ' /> Отключить отзывы для этого товара</label>';
}

function save_disable_reviews_meta_box_data($post_id) {
    if (!isset($_POST['disable_reviews_nonce']) || !wp_verify_nonce($_POST['disable_reviews_nonce'], 'disable_reviews_nonce_action')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['disable_reviews'])) {
        update_post_meta($post_id, '_disable_reviews', 'yes');
    } else {
        delete_post_meta($post_id, '_disable_reviews');
    }
}
add_action('save_post', 'save_disable_reviews_meta_box_data');

2. Отключаем отзывы на фронтенде для товаров с мета-полем

Теперь, когда мета-поле есть, нужно на уровне вывода убрать отзывы. Для этого используем фильтр WooCommerce comments_open и отключаем комментарии (отзывы) для товаров с флагом _disable_reviews.

function disable_reviews_for_selected_products($open, $post_id) {
    if (get_post_type($post_id) === 'product') {
        $disable = get_post_meta($post_id, '_disable_reviews', true);
        if ($disable === 'yes') {
            return false;
        }
    }
    return $open;
}
add_filter('comments_open', 'disable_reviews_for_selected_products', 10, 2);

3. Дополнительно: отключаем вкладку отзывов на страницах товаров

Если тема выводит отзывы через вкладки, лучше убрать вкладку «Отзывы» для отключённых товаров.

function remove_reviews_tab_for_disabled_products($tabs) {
    global $post;
    if ($post && get_post_type($post) === 'product') {
        $disable = get_post_meta($post->ID, '_disable_reviews', true);
        if ($disable === 'yes' && isset($tabs['reviews'])) {
            unset($tabs['reviews']);
        }
    }
    return $tabs;
}
add_filter('woocommerce_product_tabs', 'remove_reviews_tab_for_disabled_products', 98);

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

  • Перейдите в админку WordPress и откройте редактирование любого товара.
  • В боковой панели найдите мета-бокс «Отключить отзывы» и поставьте галочку, сохраните товар.
  • Перейдите на страницу товара на фронтенде — отзывы и вкладка с отзывами должны отсутствовать.
  • Для товаров без галочки отзывы должны отображаться как обычно.

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

  • Мета-бокс не отображается на странице товара. Проверьте, что функция добавления мета-бокса подключена через add_action('add_meta_boxes') и что тип записи правильный (product).
  • Отзывы продолжают отображаться, несмотря на отключение. Возможно, тема или плагин принудительно выводят отзывы вне стандартных хуков. Проверьте, нет ли кастомных шаблонов или функций для отзывов.
  • Не сохраняется значение мета-поля. Убедитесь, что nonce проверяется и имя поля в форме совпадает с обработчиком сохранения.
  • Вкладка отзывов не пропадает. Убедитесь, что фильтр woocommerce_product_tabs подключён с приоритетом не выше 98, чтобы переопределить другие фильтры.

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

  • Используйте wp_nonce_field и проверку nonce при сохранении мета-полей для защиты от CSRF.
  • Проверяйте тип записи перед выполнением логики, чтобы не влиять на другие записи.
  • Минимизируйте количество запросов к базе, используя кэширование мета-данных, если товаров очень много.
  • Если много товаров с отключёнными отзывами, рассмотрите возможность массового проставления мета-поля через WP-CLI или SQL-запрос.

Таблица сравнения вариантов отключения отзывов на товарах WooCommerce

МетодОписаниеПлюсыМинусы
Ручное отключение в настройках товараВ админке у каждого товара выключить чекбокс отзывовПросто, не требует кодаТрудоёмко при большом каталоге
Кастомное мета-поле + код (описано в статье)Добавление чекбокса для массового и удобного управленияГибко, автоматизация, легко расширятьНужен базовый PHP-кодинг
Плагины для управления отзывамиИспользование готовых решений с расширенными настройкамиМного функций, удобный UIНагрузка, возможные конфликты, платные опции
Как решить проблему нерабочих изображений в WordPress после переездов сайта
26.03.2026
Как удалить постоянно заблокированные IP-адреса в WordPress
07.05.2026
Как автоматизировать удаление старых комментариев в WordPress
30.03.2026
Как массово удалить мета-поля у записей в WordPress по определённым условиям
01.01.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
05.12.2025