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

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

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

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

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

  • woocommerce_order_status_completed — вызывается при смене статуса заказа на «завершен».
  • woocommerce_payment_complete — вызывается после успешной оплаты.
  • woocommerce_checkout_update_order_meta — обновление метаданных при оформлении.

Самая подходящая точка для изменения стоимости — woocommerce_order_status_completed, так как к этому моменту заказ подтвержден и оплачен.

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

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

add_action('woocommerce_order_status_completed', 'custom_change_order_item_price_after_payment');
function custom_change_order_item_price_after_payment($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);
    foreach ($order->get_items() as $item_id => $item) {
        // Новая цена, например, уменьшаем на 10%
        $old_price = $item->get_total() / $item->get_quantity();
        $new_price = round($old_price * 0.9, 2);
        
        // Устанавливаем новую цену за единицу
        $item->set_subtotal($new_price * $item->get_quantity());
        $item->set_total($new_price * $item->get_quantity());
        
        // Обновляем цену
        $item->set_subtotal_tax(0); // если есть налог, его нужно пересчитать отдельно
        $item->set_total_tax(0);
        $item->save();
    }
    // Пересчитываем итоги заказа
    $order->calculate_totals(true);
    $order->save();
}

2. Проверка результатов

Перейдите в админку WooCommerce → Заказы, откройте только что оплаченный заказ и проверьте цены позиций товара. Они должны измениться согласно вашей логике (в примере — уменьшиться на 10%). Также проверьте итоговую сумму заказа.

Если вы используете сторонние системы для учета или интеграции, убедитесь, что они получили обновленные данные.

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

  • Изменение базовой цены товара в каталоге вместо цены позиции в заказе. Решение: изменяйте только объект WC_Order_Item_Product, не трогайте WC_Product.
  • Не пересчитаны итоги заказа. После изменения цен обязательно вызовите $order->calculate_totals(true) и сохраните заказ.
  • Кэширование данных заказа сторонними плагинами. Отключите кэширование либо добавьте очистку кэша после изменения заказа.
  • Налоги не учитываются. Если у вас включены налоги, пересчитайте налоговые суммы для позиции, иначе итог будет некорректен.

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

  • Оформите тестовый заказ с оплатой (можно использовать режим песочницы платежного шлюза).
  • Перейдите в заказ и проверьте цены позиций и итоговую сумму.
  • Проверьте, что в письмах клиенту и администратору отображаются обновленные данные.
  • Если есть интеграция с 1С или CRM, проверьте, что данные передаются корректно.

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

  • Не изменяйте стоимость заказа в хуках, которые вызываются до подтверждения оплаты, чтобы избежать рассинхронизации.
  • Обрабатывайте только оплаченные заказы — фильтруйте по статусу.
  • Используйте проверку if (!$order_id) return; для защиты от ошибок.
  • Избегайте тяжелых запросов и операций внутри хука, чтобы не замедлять процесс обработки оплаты.

Сравнение методов изменения цены товара в WooCommerce после оплаты

МетодПлюсыМинусыПример
Изменение цены позиции в заказе через хук woocommerce_order_status_completed Прямой контроль над ценами, обновление только оплаченных заказов Нужно правильно пересчитать итоги и налоги Код из статьи
Изменение цены товара в каталоге (через WC_Product) Меняет цену для всех будущих заказов Не подходит для корректировки уже оплаченных заказов Не рекомендован для задачи
Использование сторонних плагинов для управления ценами Может дать готовые решения без кода Меньшая гибкость, возможны конфликты Плагины типа Dynamic Pricing
Как создать динамический список постов с фильтрами в WordPress
09.04.2026
WooCommerce: как добавить и отобразить дополнительные поля в форме оформления заказа
10.05.2026
Как использовать WPONE REST API для получения данных и мета пользователя в WordPress
26.01.2026
Как использовать хук WooCommerce 'woocommerce_order_status_changed' для автоматизации задач
20.04.2026
Как удалить или скрыть пользователя в WordPress без удаления аккаунта
06.04.2026