Как автоматически отключить комментарии на старых записях WooCommerce

Диагностика проблемы: зачем отключать комментарии на старых товарах 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)Удобный интерфейс, дополнительные функцииМожет нагружать сайт, платные варианты
Как избежать проблем с бесплатными темами WordPress: практические советы и примеры
02.02.2026
Как использовать WPGeneratePress для оптимальной настройки темы WordPress
16.12.2025
Отзывы с экспертной оценкой в WordPress: настройка и примеры кода
26.12.2025
Удаление и оптимизация базы данных WordPress без плагинов: пошаговое руководство
18.02.2026
Как сделать автоматический импорт данных в WordPress из CSV с помощью WPAcademy
11.01.2026