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

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

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

Часто пользователи сталкиваются с проблемой, что отзывы остаются активными на товарах со статусом «черновик» или «в архиве», что нежелательно.

Как автоматически отключить отзывы на неактивные товары с помощью кода

Что считается неактивным товаром

В WooCommerce неактивными будем считать товары с любым статусом, отличным от publish. Например: draft, private, pending, trash.

Решение: отключаем отзывы в шаблоне single-product или в глобальном фильтре

Для отключения отзывов у неактивных товаров можно использовать хук comments_open, который отвечает за возможность оставлять комментарии (отзывы в WooCommerce — это комментарии с типом review).

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

add_filter('comments_open', 'disable_reviews_for_inactive_products', 10, 2);
function disable_reviews_for_inactive_products($open, $post_id) {
    if (get_post_type($post_id) !== 'product') {
        return $open; // Оставляем как есть для других типов
    }
    $product = wc_get_product($post_id);
    if (!$product) {
        return $open;
    }
    // Проверяем статус товара
    $status = get_post_status($post_id);
    if ($status !== 'publish') {
        return false; // Закрываем отзывы для неактивных товаров
    }
    return $open;
}

Что делает этот код

  • Проверяет, что комментарии запрашиваются для товара WooCommerce.
  • Если товар не опубликован, возвращает false, что отключает возможность оставлять отзывы.
  • Для активных товаров отзывы остаются доступны.

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

  1. Откройте страницу товара со статусом publish — отзывы должны быть доступны.
  2. Измените статус товара на draft или private.
  3. Откройте страницу товара и убедитесь, что форма отзывов и вкладка отзывов отсутствуют.
  4. Попробуйте оставить отзыв через REST API или AJAX — должен быть запрет.

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

  • Отзывы видны, хотя товар не опубликован
    Возможно, кэш сайта или плагина мешает обновлению. Очистите кэш и проверьте снова.
  • Отзывы не отключаются для некоторых типов товаров
    Убедитесь, что тип записи действительно product. Проверьте, не переопределяется ли хук другим плагином.
  • Код не работает после обновления WooCommerce
    Проверьте совместимость функций wc_get_product и статусов. При необходимости обновите код.

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

  • Добавляйте код через дочернюю тему или кастомный плагин, чтобы не потерять изменения при обновлениях.
  • Перед внесением изменений сделайте бэкап сайта.
  • Используйте wp_cache_delete для очистки кэша товара при смене статуса, если у вас есть кэширование.
  • Проверяйте совместимость с плагинами отзывов, если они установлены (например, YITH WooCommerce Review Reminder).

Дополнительные варианты: отключение отзывов через SQL

Если хотите массово отключить отзывы для неактивных товаров в базе, можно выполнить SQL-запрос, который удалит все комментарии с типом review у товаров вне статуса publish:

DELETE c FROM wp_comments c
INNER JOIN wp_posts p ON c.comment_post_ID = p.ID
WHERE p.post_type = 'product'
AND p.post_status != 'publish'
AND c.comment_type = 'review';

Будьте осторожны: перед выполнением сделайте резервную копию базы!

Сравнение способов отключения отзывов

МетодПреимуществаНедостатки
PHP-фильтр comments_openГибкий, работает динамически, не требует изменений в базеМожет конфликтовать с плагинами, зависит от правильности статусов
SQL-удаление отзывовМгновенно очищает базу, подходит для массовой очисткиРазовый, отзывы удаляются без восстановления
Как удалить пустые термины в WordPress: эффективные методы и примеры кода
16.03.2026
Как использовать WP-Cron для задач автоматизации в WordPress
14.04.2026
Как добавить расширенные типы данных в WordPress
11.12.2025
WooCommerce: как автоматически отключать неактивные отзывы товаров с помощью кода
23.07.2026
WooCommerce: как исправить проблему с несохранением пользовательского атрибута SKU
29.04.2026