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

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

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

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

1. Определяем нужный хук для отслеживания смены статуса заказа

В WooCommerce для отслеживания изменения статуса заказа используется хук woocommerce_order_status_{from}_to_{to}. Для перехода в статус processing или completed (которые обычно означают оплату), можно использовать woocommerce_order_status_processing и woocommerce_order_status_completed.

2. Напишем функцию удаления отзывов к заказанным товарам

Отзывы в WooCommerce — это комментарии к товарам (типы записей product). Нужно получить все товары из заказа, найти все отзывы от автора этого заказа (или по email) и удалить их.

add_action('woocommerce_order_status_completed', 'wc_delete_reviews_after_payment');
add_action('woocommerce_order_status_processing', 'wc_delete_reviews_after_payment');

function wc_delete_reviews_after_payment($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    if (!$order) return;

    $user_id = $order->get_user_id();
    $user_email = $order->get_billing_email();

    // Получаем ID товаров из заказа
    $items = $order->get_items();
    $product_ids = array();
    foreach ($items as $item) {
        $product_ids[] = $item->get_product_id();
    }

    // Поиск и удаление отзывов к товарам из заказа
    foreach ($product_ids as $product_id) {
        $args = array(
            'post_id' => $product_id,
            'status' => 'approve',
            'user_id' => $user_id ? $user_id : 0,
            'author_email' => $user_email,
            'type' => 'review',
            'number' => 100 // ограничение для безопасности
        );
        $comments = get_comments($args);

        foreach ($comments as $comment) {
            wp_delete_comment($comment->comment_ID, true); // true — навсегда
        }
    }
}

3. Добавление кода в functions.php или собственный плагин

Код можно вставить в файл functions.php используемой темы или в собственный плагин. Рекомендуется создать дочернюю тему или плагин, чтобы не потерять изменения при обновлении.

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

  1. Создайте заказ в WooCommerce и оставьте отзыв на товар с тем же email/учетной записью.
  2. Оплатите заказ, измените статус на processing или completed (если оплата имитируется).
  3. Проверьте страницу товара — отзыв должен исчезнуть.
  4. Для отладки можно временно добавить в функцию error_log или var_dump для проверки получения комментариев.

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

  • Отсутствие отзывов для удаления: Убедитесь, что email/ID пользователя совпадают с теми, что оставляли отзывы.
  • Отзывы не удаляются: Проверьте, что хук срабатывает — добавьте error_log внутри функции.
  • Удаляются не нужные отзывы: Внимательно проверьте параметры get_comments, не используйте слишком общие фильтры.
  • Функция вызывает ошибки PHP: Убедитесь, что WooCommerce активен и функции доступны.

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

  • Удаляйте отзывы только после подтверждения оплаты, не при каждом изменении статуса.
  • Ограничьте количество отзывов для удаления, чтобы избежать нагрузки.
  • Создайте резервную копию базы перед внедрением автоматического удаления.
  • Для больших магазинов можно добавить очередь удаления через WP Cron для распределения нагрузки.

Сравнение подходов: плагин vs код vs ручное удаление

МетодПлюсыМинусыКомпромисс
Ручное удалениеБезопасно, простоТрудозатратно, ошибка человекаИспользовать для единичных случаев
Код (как в статье)Автоматизация, гибкостьТребует знаний, возможны багиТестировать на тестовом сайте
ПлагиныПростота установки, поддержкаМогут конфликтовать, нагрузкаИспользовать с осторожностью, проверять совместимость
WooCommerce: как автоматически удалять неактуальные купоны
05.07.2026
Как создать автоматический бэкап базы данных в WordPress
02.02.2026
Как использовать REST API для создания простого плагина WordPress
03.12.2025
Установка и настройка Redis для кэширования в WordPress
28.03.2026
WooCommerce: как автоматически удалять товар после покупки
10.05.2026