Почему нужно автоматически отключать отзывы в WooCommerce
Автоматическое отключение отзывов на товары полезно для магазинов, которые хотят ограничить сбор обратной связи после определённого периода — например, спустя 30 или 60 дней после покупки. Это снижает нагрузку на модерацию и предотвращает появление устаревших отзывов.
Диагностика задачи: как понять, что отзывы нужно отключать автоматически
Если в WooCommerce отзывы остаются открытыми постоянно, можно столкнуться с проблемами:
- Появление нерелевантных отзывов на устаревшие товары
- Увеличение времени модерации комментариев
- Негативные отзывы спустя длительное время после покупки, что искажает репутацию
Проверить, включены ли отзывы на товары, можно в админке WordPress в разделе Настройки > Обсуждение или непосредственно у каждого товара в метабоксе отзывов.
Пошаговое решение: автоматическое отключение отзывов по дате
1. Создание пользовательского поля с датой отключения
Чтобы задать срок, после которого отзывы будут закрыты, добавим кастомное поле с датой окончания сбора отзывов. Это можно сделать вручную при редактировании товара или программно.
2. Функция для проверки и отключения отзывов
Добавьте следующий код в functions.php вашей темы или в кастомный плагин:
function wc_disable_reviews_after_date() {
if ( ! is_product() ) {
return;
}
global $product;
$product_id = $product->get_id();
$disable_date = get_post_meta( $product_id, '_reviews_disable_date', true );
if ( ! $disable_date ) {
return; // Дата отключения не установлена
}
$current_date = current_time( 'Y-m-d' );
if ( $current_date >= $disable_date ) {
remove_post_type_support( 'product', 'comments' );
add_filter( 'comments_open', '__return_false', 20 );
}
}
add_action( 'wp', 'wc_disable_reviews_after_date' );Этот код проверяет дату, сохранённую в метаполе _reviews_disable_date, и если текущая дата равна или больше — отключает отзывы на товар.
3. Автоматическое назначение даты отключения при публикации заказа
Чтобы автоматизировать процесс, можно задавать дату отключения отзывов автоматически — например, через 30 дней после покупки товара. Добавьте этот код:
function wc_set_reviews_disable_date_on_order_completed( $order_id ) {
$order = wc_get_order( $order_id );
if ( ! $order ) {
return;
}
foreach ( $order->get_items() as $item ) {
$product_id = $item->get_product_id();
$disable_date = get_post_meta( $product_id, '_reviews_disable_date', true );
if ( $disable_date ) {
continue; // Уже есть дата
}
// Устанавливаем дату через 30 дней от дня заказа
$order_date = $order->get_date_created();
if ( ! $order_date ) {
continue;
}
$new_disable_date = $order_date->date( 'Y-m-d' );
$new_disable_date = date( 'Y-m-d', strtotime( $new_disable_date . ' +30 days' ) );
update_post_meta( $product_id, '_reviews_disable_date', $new_disable_date );
}
}
add_action( 'woocommerce_order_status_completed', 'wc_set_reviews_disable_date_on_order_completed' );Проверка результата после внедрения
Чтобы удостовериться, что отзывы отключаются корректно:
- Проверьте, что у товара в метаполе
_reviews_disable_dateстоит дата через 30 дней после даты заказа - Откройте страницу товара на фронтенде в разные даты (можно менять системное время или использовать отложенный тест)
- Убедитесь, что при достижении этой даты форма для добавления отзыва не отображается и комментарии закрыты
- Проверьте, что до наступления даты отзывы доступны
Частые ошибки и способы их исправления
- Отзывы не отключаются после даты: возможно, тема или плагины переопределяют поддержку комментариев. Проверьте, не вызывается ли
comments_openс приоритетом выше 20. - Дата отключения не сохраняется: убедитесь, что метаполе
_reviews_disable_dateправильно добавлено и обновлено. Проверьте права пользователя и работу хукаwoocommerce_order_status_completed. - Отзывы отключаются на всех товарах сразу: проверьте, что функция отключения отзывов вызывается только на странице товара
is_product(), а не глобально.
Практические советы по безопасности и производительности
- Для производительности лучше кэшировать результаты проверки дат и не выполнять лишние операции при загрузке страниц.
- Обновление метаполей при каждом заказе может привести к гонкам данных — убедитесь, что дата задаётся один раз и корректно.
- Для безопасности не храните дату в открытом виде — используйте стандартные функции WordPress для работы с метаданными.
Сравнение подходов к отключению отзывов в WooCommerce
| Метод | Плюсы | Минусы |
|---|---|---|
| Плагин автоматического отключения отзывов | Простота установки, готовый интерфейс | Может перегружать сайт, лишний функционал |
| Кастомный код с датой в метаполе | Точный контроль, лёгкость кастомизации | Требуется разработка, возможны конфликты с темой |
| Ручное отключение отзывов на товаре | Просто и быстро | Непрактично для большого каталога |