WooCommerce: как изменить статус отзывов товаров без плагинов

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

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

Как определить текущий статус отзывов товаров

Отзывы в WooCommerce — это записи типа comment с типом комментария review. Статус комментария хранится в базе WordPress в колонке comment_approved. Возможные значения:

  • 0 — ожидает модерации;
  • 1 — одобрен;
  • spam — спам;
  • trash — удалён.

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

Пошаговое решение: программное изменение статуса отзывов

1. Найти нужные отзывы

Используем функцию get_comments() с параметрами для выборки отзывов по статусу, товару, дате и другим параметрам. Например, получим все отзывы со статусом «ожидает» для товара с ID 123:

$args = [
    'post_id' => 123,
    'status' => 'hold', // 'hold' соответствует 0 (ожидает модерации)
    'type' => 'review'
];
$comments = get_comments($args);

2. Изменить статус отзывов с помощью wp_set_comment_status()

Для обновления статуса используйте функцию wp_set_comment_status(). Она автоматически меняет статус и вызывает нужные хуки.

foreach ($comments as $comment) {
    // Меняем статус на одобренный
    wp_set_comment_status($comment->comment_ID, 'approve');
}

3. Автоматизация на определённом событии

Например, автоматически одобрять отзывы, если автор уже делал одобренный отзыв ранее. Для этого добавим код в файл functions.php вашей темы или в кастомный плагин:

add_action('comment_post', 'auto_approve_repeat_reviewer', 10, 2);
function auto_approve_repeat_reviewer($comment_ID, $comment_approved) {
    if ($comment_approved != '0') return; // Только новые отзывы в ожидании

    $comment = get_comment($comment_ID);
    if ($comment->comment_type !== 'review') return; // Только отзывы

    $user_email = $comment->comment_author_email;
    $args = [
        'author_email' => $user_email,
        'status' => 'approve',
        'type' => 'review',
        'count' => true
    ];
    $approved_count = get_comments($args);

    if ($approved_count > 0) {
        wp_set_comment_status($comment_ID, 'approve');
    }
}

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

  • Зайдите в админку WordPress — раздел Отзывы или Комментарии. Убедитесь, что нужные отзывы получили статус «одобрен».
  • Просмотрите страницу товара на фронтенде — отзывы с новым статусом должны отображаться без задержек.
  • Для отладки можно добавить временный лог через error_log() внутри функции, чтобы проверить, когда меняется статус.

Частые ошибки и способы их исправления

  • Ошибка: Статус не меняется, отзывы остаются в ожидании.
    Причина: Неверный второй параметр в wp_set_comment_status() или отключён вызов функции.
    Решение: Проверьте, что второй параметр — строка 'approve' или 'hold'. Убедитесь, что код вызывается после инициализации WordPress.
  • Ошибка: Автоматическое одобрение срабатывает для всех комментариев.
    Причина: Отсутствие проверки типа комментария.
    Решение: Добавьте проверку $comment->comment_type === 'review'.
  • Ошибка: Конфликты с плагинами модерации отзывов.
    Решение: Проверьте совместимость, отключите другие плагины модерации и протестируйте повторно.

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

  • Избегайте массовых изменений статусов отзывов в одном запросе без ограничения количества, чтобы не нагружать базу данных.
  • Используйте транзакции и кеширование, если меняете статусы большого объёма отзывов.
  • Обязательно проверяйте пользовательские данные и контекст при автоматическом одобрении, чтобы избежать спама.
  • Для более тонкой настройки модерации рассмотрите интеграцию с плагином Clearfy Pro для оптимизации и удаления мусора с сайта https://wpshop.ru/plugins/clearfy.

Сравнение способов изменения статусов отзывов

МетодПлюсыМинусы
Ручное через админкуПросто, не требует кодаМедленно, неудобно при большом объёме
Код в functions.php (как в статье)Автоматизация, гибкость, без лишних плагиновТребует знаний PHP, можно ошибиться
Плагины модерацииДополнительные функции, UI для управленияНагрузка, конфликты, избыточность
WooCommerce: как отключить автоматическое обновление статуса заказов
20.06.2026
Обновление плагинов WordPress без потери настроек и конфликтов
05.12.2025
WooCommerce: как программно изменить статус заказа без плагинов
13.07.2026
WooCommerce: как отключить возможность изменения адреса доставки после оформления заказа
10.07.2026
Как добавить дополнительные поля в формы регистрации WordPress
17.02.2026