Диагностика проблемы: зачем отключать отзывы на отдельных товарах
В WooCommerce отзывы включены глобально и по умолчанию отображаются на всех товарах. Однако в некоторых случаях нужно отключить отзывы только для конкретных товаров: например, для товаров с ограниченной гарантией, цифровых продуктов, или тех, где отзывы неуместны. Простого переключателя в админке WooCommerce для отдельных товаров нет, поэтому требуется техническое решение.
Пошаговое решение: отключение отзывов на уровне отдельных товаров
1. Отключение отзывов через метаполе товара
Первый способ — добавить пользовательское поле (метаполе) в карточку товара, которое будет отвечать за включение/отключение отзывов.
function add_disable_reviews_metabox() {
add_meta_box('disable_reviews', 'Отключить отзывы', 'disable_reviews_callback', 'product', 'side', 'default');
}
function disable_reviews_callback( $post ) {
$value = get_post_meta( $post->ID, '_disable_reviews', true );
wp_nonce_field( 'disable_reviews_nonce', 'disable_reviews_nonce' );
?>
<label>
<input type="checkbox" name="disable_reviews" value="1" <?php checked( $value, '1' ); ?> /> Отключить отзывы для этого товара
</label>
<?php
}
function save_disable_reviews_meta( $post_id ) {
if ( ! isset( $_POST['disable_reviews_nonce'] ) || ! wp_verify_nonce( $_POST['disable_reviews_nonce'], 'disable_reviews_nonce' ) ) {
return;
}
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) {
return;
}
if ( isset($_POST['disable_reviews']) ) {
update_post_meta( $post_id, '_disable_reviews', '1' );
} else {
delete_post_meta( $post_id, '_disable_reviews' );
}
}
add_action( 'add_meta_boxes', 'add_disable_reviews_metabox' );
add_action( 'save_post', 'save_disable_reviews_meta' );2. Удаление вкладки отзывов для товаров с отключёнными отзывами
Теперь, когда мы можем метить товар, нужно убрать вкладку с отзывами на фронтенде для таких товаров.
function disable_reviews_tab_for_specific_products( $tabs ) {
global $product;
if ( ! $product ) {
return $tabs;
}
$disable_reviews = get_post_meta( $product->get_id(), '_disable_reviews', true );
if ( '1' === $disable_reviews && isset( $tabs['reviews'] ) ) {
unset( $tabs['reviews'] );
}
return $tabs;
}
add_filter( 'woocommerce_product_tabs', 'disable_reviews_tab_for_specific_products', 98 );3. Отключение формы добавления отзыва
Чтобы полностью предотвратить добавление отзывов, стоит отключить вывод формы комментариев для таких товаров.
function disable_comments_for_disabled_review_products( $open, $post_id ) {
$disable_reviews = get_post_meta( $post_id, '_disable_reviews', true );
if ( '1' === $disable_reviews ) {
return false;
}
return $open;
}
add_filter( 'comments_open', 'disable_comments_for_disabled_review_products', 10, 2 );Проверка результата после внедрения
- Перейдите в админку WooCommerce, отредактируйте товар, поставьте галочку «Отключить отзывы» и сохраните.
- Откройте страницу этого товара на фронтенде: вкладка «Отзывы» должна исчезнуть.
- Попробуйте добавить отзыв — форма должна отсутствовать.
- Для товаров без галочки отзывы отображаются и работают как обычно.
Частые ошибки и как их исправить
- Отзывы не отключаются: проверьте, что код добавлен в functions.php темы или в кастомный плагин, и активен. Очистите кэш сайта и браузера.
- Вкладка отзывов не исчезает: убедитесь, что в шаблонах темы не переопределён фильтр
woocommerce_product_tabsс приоритетом выше 98. - Отзывы можно оставить, хотя вкладка скрыта: проверьте фильтр
comments_open, он должен вернуть false для товаров с отключёнными отзывами. - Потеря данных отзывов: отзывы не удаляются, они просто не отображаются и не принимаются, что безопасно.
Практические советы по безопасности и производительности
- Храните метаполе с булевым значением (например, '1' или отсутствие ключа) для минимизации нагрузки на базу.
- Используйте
wp_nonce_fieldи проверку nonce при сохранении метаполя для безопасности. - Отключайте отзывы только там, где это действительно нужно, чтобы не потерять пользовательский контент.
- После внедрения всегда проверяйте работу на тестовом сайте, чтобы избежать ошибок на живом магазине.
Сравнение вариантов отключения отзывов для отдельных товаров
| Метод | Плюсы | Минусы |
|---|---|---|
| Использование метаполя + фильтры WooCommerce | Гибко, удобно для управления в админке, не требует сторонних плагинов | Требует базовых знаний PHP, ручная настройка для каждого товара |
| Использование сторонних плагинов для управления отзывами | Простота настройки, дополнительные функции (модерация, CAPTCHA) | Может нагружать сайт, не всегда есть опция для отключения отзывов по товару |
| Отключение отзывов глобально | Просто, быстро | Нельзя выборочно отключать отзывы, потеря функционала |