WooCommerce: как автоматически удалять отзывы после оплаты заказа

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

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

Стандартных настроек WooCommerce для автоматического удаления отзывов нет, поэтому нужно реализовать кастомное решение.

Пошаговое решение: удаление отзывов после смены статуса заказа на «Оплачен»

1. Создаем хук на смену статуса заказа

WooCommerce позволяет отслеживать смену статусов заказа через хук 'woocommerce_order_status_changed'. Мы будем использовать этот хук, чтобы запускать функцию удаления отзывов, когда заказ оплачивается (например, статус меняется на 'processing' или 'completed').

2. Получаем ID товаров из заказа

Нужно получить все товары из заказа, чтобы удалить отзывы именно к этим товарам.

3. Удаляем отзывы (комментарии) по товарам

Отзывы в WooCommerce — это комментарии с типом comment_type = 'review' или просто comment_type = '' (обычные комментарии), которые связаны с продуктом через comment_post_ID.

function wpid_delete_reviews_after_payment($order_id, $old_status, $new_status, $order) {
    // Проверяем, что новый статус - обработка или выполнен
    if (in_array($new_status, ['processing', 'completed'])) {
        $items = $order->get_items();
        foreach ($items as $item) {
            $product_id = $item->get_product_id();
            // Получаем комментарии (отзывы) для продукта
            $comments = get_comments([
                'post_id' => $product_id,
                'status' => 'approve',
                'type' => 'review', // если отзывы отмечаются как review
            ]);
            foreach ($comments as $comment) {
                wp_delete_comment($comment->comment_ID, true); // принудительное удаление
            }
        }
    }
}
add_action('woocommerce_order_status_changed', 'wpid_delete_reviews_after_payment', 10, 4);

4. Добавляем код в functions.php или отдельный плагин

Рекомендуется выносить подобный код в собственный плагин, чтобы не потерять при обновлении темы.

Как проверить, что решение сработало

  • Создайте тестовый заказ с товарами, на которые уже есть отзывы.
  • Оплатите заказ (переведите в статус «processing» или «completed»).
  • Обновите страницу товара и проверьте, что отзывы исчезли.
  • В базе данных в таблице wp_comments проверьте, что отзывы с comment_post_ID равным ID товара удалены.

Частые ошибки и как их исправить

  • Отзывы не удаляются: Проверьте, что статус заказа действительно меняется на processing или completed. Для отладки можно добавить error_log() внутри функции.
  • Отзывы остаются, потому что тип комментария не «review»: В некоторых темах и плагинах отзывы могут иметь пустой comment_type. Попробуйте убрать фильтр 'type' => 'review' или добавить второй запрос для типа ''.
  • Удаляются не все отзывы: Если отзывы к товару создаются через сторонние плагины, проверьте, не меняют ли они логику хранения комментариев.
  • Потеря данных: Обязательно сделайте резервную копию базы перед внедрением кода удаления.

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

  • Используйте принудительное удаление wp_delete_comment($comment_id, true), чтобы полностью удалить комментарии без помещения в корзину.
  • Обрабатывайте удаление асинхронно, если у заказа много товаров и отзывов, чтобы избежать таймаутов (например, через WP-Cron или сторонний обработчик).
  • Добавьте проверку прав пользователя или nonce, если планируете расширять функционал на пользовательскую сторону.
  • Ограничьте удаление только для определённых ролей или условий (например, только для тестовых заказов), чтобы избежать случайной потери отзывов реальных клиентов.

Сравнение подходов: плагин vs кастомный код

МетодПлюсыМинусыКогда использовать
Кастомный код в functions.php или плагинеТочный контроль, минимальная нагрузка, отсутствие лишних функцийТребует навыков PHP, возможность ошибокДля опытных разработчиков с кастомными требованиями
Плагины для управления отзывамиУдобный интерфейс, расширенные настройкиМожет нагружать сайт, не всегда есть опция автоудаления после оплатыДля новичков и случаев без сложной логики
Как исключить определённые плагины из автообновлений в WordPress
01.05.2026
Использование хука pre_get_posts для фильтрации постов в WordPress
18.01.2026
Как отключить AJAX в Gutenberg для ускорения работы редактора WordPress
01.03.2026
Как удалить защищённые от роботов страницы в WordPress
17.03.2026
Как создать шорткод для вывода случайного поста в WordPress
29.11.2025