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

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

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

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

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

Для вмешательства после оплаты лучше всего использовать хук woocommerce_order_status_completed. Он срабатывает, когда статус заказа меняется на «завершён» — сигнализируя, что оплата прошла успешно и можно вносить корректировки.

Также возможен хук woocommerce_payment_complete, который срабатывает сразу после оплаты, но не после изменения статуса.

Пример использования woocommerce_order_status_completed

add_action('woocommerce_order_status_completed', 'custom_change_order_items_price', 10, 1);
function custom_change_order_items_price($order_id) {
    $order = wc_get_order($order_id);
    if (!$order) return;

    foreach ($order->get_items() as $item_id => $item) {
        // Новая цена товара после оплаты
        $new_price = 100; // например фиксированная цена

        // Устанавливаем новую цену для элемента заказа
        $item->set_subtotal($new_price * $item->get_quantity());
        $item->set_total($new_price * $item->get_quantity());
        $item->save();
    }

    // Обновляем итоги заказа
    $order->calculate_totals();
    $order->save();
}

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

  1. Подключитесь к сайту по FTP или через редактор тем.
  2. Откройте файл functions.php вашей дочерней темы или создайте небольшой плагин для кастомного кода.
  3. Вставьте код из примера выше, скорректировав логику расчёта новой цены.
  4. Сохраните изменения и очистите кеш сайта и браузера.
  5. Оформите тестовый заказ и дожидайтесь смены статуса на «завершён».

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

После смены статуса заказа на «завершён» перейдите в админку WooCommerce > Заказы, откройте заказ и проверьте стоимость каждого товара и итоговую сумму. Цены должны соответствовать новым значениям, заданным в коде.

Если вы выводите стоимость заказа на фронтенде, обновите страницу, чтобы увидеть изменения. Для дополнительной проверки можно вывести лог в файл с помощью error_log() внутри функции.

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

  • Изменения не сохраняются: убедитесь, что вызываете $item->save() и $order->save() после внесения изменений.
  • Цена не меняется на фронтенде: возможно, включено кэширование — очистите все кеши, включая серверный и браузерный.
  • Функция не срабатывает: проверьте, что хук подключён корректно и ваш код не конфликтует с другими плагинами.
  • Неправильные расчёты итогов: используйте $order->calculate_totals() после изменения цен, иначе сумма заказа не пересчитается.

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

  • Не изменяйте цены товаров в базе напрямую без проверки — лучше менять цены только в заказах, чтобы не влиять на каталог.
  • Всегда тестируйте код на staging-сайте перед применением на боевом.
  • Избегайте тяжёлых операций в хуках оплаты — они влияют на скорость оформления заказа.
  • Для прозрачности логируйте изменения цен в отдельный файл или метаданные заказа.

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

МетодПлюсыМинусы
Хук woocommerce_order_status_completedРаботает после подтверждения оплаты, удобно для финальных измененийНе срабатывает, если статус не обновляется
Хук woocommerce_payment_completeСрабатывает сразу после оплатыМенее универсален, не учитывает смену статуса
Изменение цен в корзине с помощью фильтровПростая реализация до оформления заказаНе работает после оплаты, не подходит для корректировок в заказе
Как создать функцию автoрегистрации пользователей WordPress с подтверждением email
09.01.2026
Как использовать метаданные в WordPress для уникального контента
01.02.2026
Как удалить или скрыть пользователя в WordPress без удаления аккаунта
03.04.2026
Как создать собственный блок для Gutenberg в WordPress
16.01.2026
WooCommerce: как изменить стоимость товара после оплаты с помощью хука
04.05.2026