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

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

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

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

Перед решением важно понять, по каким критериям отключать отзывы. Обычно используют:

  • ID товара или его категории;
  • тип товара (простой, вариативный и т.д.);
  • метаполя или произвольные поля, в которых хранится флаг отключения отзывов;
  • условия по дате публикации или статусу товара.

Для диагностики можно вывести var_dump(get_post_meta($product_id)) или проверить категорию через has_term().

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

Лучший способ — использовать хук comments_open, который отвечает за разрешение комментариев (в том числе и отзывов WooCommerce) на странице товара.

Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

add_filter('comments_open', 'disable_reviews_on_selected_products', 10, 2);function disable_reviews_on_selected_products($open, $post_id) {    if (get_post_type($post_id) !== 'product') {        return $open;    }    // Пример 1: отключение по ID товара    $excluded_ids = array(123, 456);    if (in_array($post_id, $excluded_ids)) {        return false;    }    // Пример 2: отключение по категории    if (has_term('no-reviews', 'product_cat', $post_id)) {        return false;    }    // Пример 3: отключение по метаполю _disable_reviews = 'yes'    $disable_flag = get_post_meta($post_id, '_disable_reviews', true);    if ($disable_flag === 'yes') {        return false;    }    return $open;}

Объяснение:

  • Сначала проверяем, что это товар;
  • если ID товара есть в списке исключений — отключаем отзывы;
  • если у товара есть категория no-reviews — отключаем;
  • если у товара есть метаполе _disable_reviews со значением yes — отключаем;
  • иначе оставляем текущее состояние.

Как добавить метаполе для отключения отзывов в админке

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

add_action('add_meta_boxes', function() {    add_meta_box('disable_reviews_box', 'Отключить отзывы', function($post) {        $value = get_post_meta($post->ID, '_disable_reviews', true);        wp_nonce_field('disable_reviews_nonce', 'disable_reviews_nonce_field');        ?>        <label><input type="checkbox" name="disable_reviews" value="yes" <?php checked($value, 'yes'); ?>> Отключить отзывы на этом товаре</label>        <?php    }, 'product', 'side');});add_action('save_post', function($post_id) {    if (!isset($_POST['disable_reviews_nonce_field']) || !wp_verify_nonce($_POST['disable_reviews_nonce_field'], 'disable_reviews_nonce')) {        return;    }    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {        return;    }    if (isset($_POST['disable_reviews']) && $_POST['disable_reviews'] === 'yes') {        update_post_meta($post_id, '_disable_reviews', 'yes');    } else {        delete_post_meta($post_id, '_disable_reviews');    }});

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

Для проверки:

  1. Откройте страницу товара с ID из массива $excluded_ids — отзывы должны быть отключены;
  2. Проверьте товар с категорией no-reviews — отзывы также отсутствуют;
  3. Для товара с установленным метаполем _disable_reviews = yes отзывы отключены;
  4. Для остальных товаров отзывы отображаются как обычно.

Если отзывы не отображаются, значит фильтр работает корректно.

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

  • Отзывы отображаются несмотря на код. Проверьте, что код добавлен в активную тему или плагин, и что нет конфликтов с другими плагинами, которые могут принудительно включать отзывы.
  • Код не работает для вариативных товаров. У вариативных товаров отзывы привязаны к родительскому товару. Убедитесь, что проверяете именно ID родительского товара.
  • Метабокс не сохраняется. Проверьте наличие wp_nonce_field и корректность проверки nonce при сохранении.
  • Отзывы не отключаются на страницах архивов. Фильтр comments_open работает только на страницах одиночного товара. Для архивов нужно дополнительно убирать блок отзывов в шаблонах.

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

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

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

Метод Плюсы Минусы
Фильтр comments_open с проверкой ID/категории/метаполя Гибко, работает без изменения шаблонов, легко масштабируется Не отключает блок отзывов на архивах, требует кода
Отключение через шаблоны (удаление блока reviews.php) Прямой контроль над выводом, простой способ для отдельных тем Менее гибко, требует копирования и редактирования шаблонов
Плагины для управления отзывами Удобный интерфейс, дополнительные функции модерации Зависимость от стороннего кода, нагрузка на сайт, платные функции
Как убрать замедление страниц WooCommerce при большом количестве товаров
22.04.2026
Как создать динамическую таблицу в WordPress с помощью AJAX
25.12.2025
Как автоматически удалять товары WooCommerce с неактивным статусом
23.06.2026
Как создать автоматический импорт постов в WordPress из внешнего источника
25.12.2025
Как закрыть от индексации страницы с параметрами в WordPress
30.08.2026