Диагностика проблемы: зачем отключать комментарии на старых товарах WooCommerce
В магазинах на WooCommerce часто возникает необходимость закрыть комментарии (отзывы) на устаревших товарах, например, если товар снят с продажи или не поддерживается более 6 месяцев. Оставлять открытые отзывы на такие позиции не всегда имеет смысл — это может мешать модерации, нагружать базу данных и создавать ложное впечатление о товаре.
По умолчанию WooCommerce не предоставляет встроенного механизма для массового или автоматического закрытия комментариев по дате публикации товара. Поэтому часто приходится реализовывать это самостоятельно.
Как определить, что комментарии открыты на старых товарах WooCommerce
Первый шаг — проверить, что комментарии действительно включены на товарах старше нужного периода. Можно сделать SQL-запрос для выборки таких товаров:
SELECT ID, post_title, post_date, comment_status FROM wp_posts WHERE post_type = 'product' AND post_date < DATE_SUB(NOW(), INTERVAL 6 MONTH) AND comment_status = 'open';Если запрос вернул записи, значит комментарии открыты на устаревших товарах, и их нужно закрыть.
Пошаговое решение: автоматическое закрытие комментариев на товарах старше 6 месяцев
1. Создание функции для закрытия комментариев
Добавьте следующий код в functions.php вашей дочерней темы или в отдельный плагин:
function wp_disable_comments_on_old_products() {
$args = array(
'post_type' => 'product',
'posts_per_page' => -1,
'date_query' => array(
array(
'before' => '6 months ago',
),
),
'comment_status' => 'open',
'fields' => 'ids',
);
$old_products = get_posts($args);
if (!empty($old_products)) {
foreach ($old_products as $product_id) {
wp_update_post(array(
'ID' => $product_id,
'comment_status' => 'closed',
));
}
}
}2. Настройка автоматического запуска с помощью WP-Cron
Чтобы регулярно отключать комментарии на новых старых товарах, зарегистрируем событие, выполняющее функцию раз в сутки:
if (! wp_next_scheduled('wp_disable_comments_daily_event')) {
wp_schedule_event(time(), 'daily', 'wp_disable_comments_daily_event');
}
add_action('wp_disable_comments_daily_event', 'wp_disable_comments_on_old_products');3. Ручной запуск для немедленного эффекта
Для проверки сразу после добавления кода можно вызвать функцию вручную в админке, например через functions.php или консоль WP-CLI:
wp eval 'wp_disable_comments_on_old_products();'Проверка результата после внедрения
Для проверки выполните SQL-запрос из раздела диагностики повторно. Все товары старше 6 месяцев должны иметь comment_status = 'closed'.
Можно также открыть страницу товара в админке и убедиться, что вкладка комментариев либо недоступна, либо отображает закрытый статус.
Частые ошибки и как их исправить
- Комментарии не закрылись: убедитесь, что WP-Cron работает на сайте. WP-Cron зависит от посещений сайта, если трафика мало — планировщик не срабатывает. Для теста запустите функцию вручную.
- Функция не находит товаров: проверьте, что товары действительно старше 6 месяцев. В админке дата публикации должна быть корректной.
- Использование кеша: если используется кеширование, изменения могут не отображаться сразу. Очистите кеш после запуска функции.
- Права доступа: убедитесь, что пользователь, добавляющий код, имеет права на редактирование товаров.
Практические советы по безопасности и производительности
- Для сайтов с большим количеством товаров разбивайте обработку на части, добавляя параметр
'posts_per_page' => 100и пагинацию, чтобы не перегружать сервер. - Используйте transient или опцию в базе данных, чтобы отмечать дату последнего запуска и не запускать функцию чаще, чем нужно.
- Для надежности WP-Cron можно заменить на системный cron на сервере, особенно на проектах с низким трафиком.
- Если вы используете плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpacademy.ru&utm_medium=article&utm_campaign=kak-avtomaticheski-otklyuchit-kommentarii-na-starikh-zapisyakh-woocommerce), он содержит инструменты для массового управления комментариями и может облегчить задачу.
Сравнение вариантов решения
| Метод | Плюсы | Минусы |
|---|---|---|
| Ручное закрытие в админке | Простота, контроль над каждым товаром | Затратно при большом количестве товаров |
| Автоматический скрипт с WP-Cron (код) | Полная автоматизация, гибкость настройки | Зависит от WP-Cron, требует навыков разработки |
| Плагины (например, Clearfy Pro) | Удобный интерфейс, дополнительные функции | Может нагружать сайт, платные варианты |