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

В чем проблема: зачем менять стоимость товара после оплаты

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

Типичные сценарии

  • Изменение цены товара после первой покупки (лояльность)
  • Автоматическое обновление цены для повторных заказов
  • Коррекция цены после успешной оплаты с учётом дополнительных условий

Диагностика задачи и ограничения WooCommerce

WooCommerce хранит цены товаров в мета-данных _regular_price, _sale_price и _price. При оформлении заказа цены копируются в мета заказа и не меняются динамически. После оплаты система не обновляет цены товара автоматически.

Для реализации изменения цены после успешной оплаты нужно использовать хуки, срабатывающие при смене статуса заказа.

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

1. Используем хук woocommerce_order_status_completed — срабатывает при переходе заказа в статус «завершён». Это лучший момент для внесения изменений.

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

3. Обновляем цену товара через функции update_post_meta.

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

    foreach ($order->get_items() as $item) {
        $product_id = $item->get_product_id();

        // Получаем текущую цену
        $current_price = get_post_meta($product_id, '_regular_price', true);

        // Логика изменения цены: например, уменьшаем на 10% после оплаты
        $new_price = round($current_price * 0.9, 2);

        // Обновляем цену
        update_post_meta($product_id, '_regular_price', $new_price);
        update_post_meta($product_id, '_price', $new_price);

        // Удаляем акционную цену, если была
        delete_post_meta($product_id, '_sale_price');
    }
}

4. Проверяем, что новое значение цены сохранено и отображается на странице товара (обновите кэш, если используется).

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

  • После оплаты заказа и смены статуса на «завершён» проверьте цену товара на фронтенде.
  • Для проверки можно использовать WP-CLI команду wp post meta get PRODUCT_ID _price.
  • Проверьте, что цена уменьшилась на 10% относительно исходной.

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

  • Цена не меняется после оплаты
    Проверьте, срабатывает ли хук woocommerce_order_status_completed. Для отладки используйте error_log или плагин Debug Bar.
  • Изменения цены не отображаются на сайте
    Возможно, кэширование страницы или объектов не обновляется. Очистите кэш плагинов и CDN.
  • Цена меняется, но не корректно
    Проверьте логику вычисления новой цены, типы данных и округление.
  • Изменение цены влияет на текущие заказы
    Цена товара в уже оформленных заказах не меняется, так как хранится в мета заказа. Не нужно пытаться менять цену в старых заказах.

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

  • Обновление цены товара должно происходить только после успешной оплаты, чтобы избежать ошибок в учёте.
  • Используйте проверку ролей или метаданных заказа, чтобы ограничить обновление только нужных товаров.
  • При массовом обновлении цен через заказы рекомендуется запускать процесс через WP-Cron или очередь для снижения нагрузки.
  • Избегайте прямого изменения цены в базе без резервного копирования, чтобы не потерять данные.

Сравнение способов автоматического изменения цены

МетодОписаниеПлюсыМинусы
Использование хука woocommerce_order_status_completedИзменение цены товара при смене статуса заказаПростая реализация, работает при оплатеЦена меняется глобально, влияет на все будущие заказы
Изменение цены в корзине/чекауте по пользовательской логикеИзменение цены динамически при оформлении заказаГибко, можно менять только для конкретного заказаСложнее в реализации, требует глубокого знания хуков WooCommerce
Использование сторонних плагинов для динамического ценообразованияПлагины для скидок и изменения ценБыстро, много готовых функцийМожет быть дорого, дополнительная нагрузка на сайт
Как удалить все незавершённые заказы WooCommerce без плагинов
23.04.2026
Как создать настройку отображения для каждого пользователя в WordPress
15.02.2026
WooCommerce: как устранить ошибку «Невозможно создать заказ» при оформлении
17.06.2026
Как изменить структуру ссылок в WordPress без потери позиций в поиске
18.03.2026
Как удалить зависшие корзины в WooCommerce без плагинов
07.06.2026