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

|

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

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

Как работает процесс изменения стоимости в WooCommerce

В WooCommerce стоимость товара в корзине и заказе рассчитывается на основе цены товара и скидок. Для динамической корректировки цены в момент оформления заказа нужно изменить цену именно в объекте WC_Cart или WC_Order_Item_Product. Изменение цены напрямую в базе данных товара не подходит, так как цены должны меняться только для конкретного заказа.

Ключевые хуки для изменения цены в WooCommerce

Пошаговое решение: изменяем цену товара при оплате

В данном примере мы реализуем автоматическое уменьшение цены товара на 10% в момент оформления заказа (например, для зарегистрированных пользователей). Для этого достаточно добавить следующий код в файл functions.php вашей темы или в отдельный плагин:

add_action('woocommerce_before_calculate_totals', 'custom_apply_discount_on_cart_items', 10, 1);
function custom_apply_discount_on_cart_items($cart) {
    if (is_admin() && !defined('DOING_AJAX')) return;
    // Проверяем, авторизован ли пользователь
    if (!is_user_logged_in()) return;

    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        $original_price = floatval($product->get_regular_price());
        $discounted_price = $original_price * 0.9; // скидка 10%
        $product->set_price($discounted_price);
    }
}

Этот код уменьшит цену всех товаров в корзине на 10%, если пользователь авторизован.

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

add_action('woocommerce_checkout_create_order_line_item', 'custom_change_order_item_price', 10, 4);
function custom_change_order_item_price($item, $cart_item_key, $values, $order) {
    $product = $item->get_product();
    $original_price = floatval($product->get_regular_price());
    if (is_user_logged_in()) {
        $discounted_price = $original_price * 0.9;
        $item->set_subtotal($discounted_price * $item->get_quantity());
        $item->set_total($discounted_price * $item->get_quantity());
        $item->set_subtotal_tax(0);
        $item->set_total_tax(0);
    }
}

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

  1. Авторизуйтесь на сайте как пользователь.
  2. Добавьте несколько товаров в корзину.
  3. Перейдите в корзину и убедитесь, что цены товаров уменьшились на 10%.
  4. Оформите заказ и посмотрите детали заказа в админке WooCommerce — цена должна совпадать с уменьшенной.
  5. Для неавторизованных пользователей цена останется без изменений.

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

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

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

МетодОписаниеПлюсыМинусы
Изменение цены в woocommerce_before_calculate_totalsКорректировка цены в корзине перед расчетомРаботает для всех товаров в корзине, гибкоНе влияет на цену в уже созданных заказах
Изменение цены в woocommerce_checkout_create_order_line_itemКорректировка цены при создании заказаЦена сохраняется в заказе, точное соответствиеНе влияет на отображение в корзине
Изменение цены товара напрямуюИзменение цены в базе товараПостоянное изменение ценыНеприемлемо для динамических скидок, влияет на всех
Оптимизация базы данных WordPress: удаляем избыточные данные для ускорения сайта
18.11.2025
WooCommerce: как автоматически удалять товар из корзины после оплаты
20.04.2026
Как удалить авторизованного пользователя без пароля в WordPress
12.02.2026
Как использовать AJAX в WordPress для обновления контента без перезагрузки страницы
05.12.2025
WooCommerce: как автоматически удалять отменённые и неактивные заказы
12.06.2026
×
WPShop
партнерка без «но»!

До 3225₽ за каждую продажу

Подключиться к игре