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

|

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

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

В чем проблема без автоматических изменений?

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

Для изменения цены товаров в корзине до создания заказа нужно использовать хук woocommerce_before_calculate_totals. В этом хуке можно менять цену товаров динамически.

Пример кода, который добавляет 10% комиссию к цене товара при наличии определённого способа оплаты (например, 'cod' - наложенный платеж):

add_action('woocommerce_before_calculate_totals', 'custom_change_price_on_payment_method', 10, 1);
function custom_change_price_on_payment_method($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    // Получаем выбранный способ оплаты из сессии
    $chosen_payment = WC()->session->get('chosen_payment_method');

    // Проверяем, выбран ли способ оплаты 'cod'
    if ($chosen_payment !== 'cod') {
        return; // Если выбран другой способ, ничего не меняем
    }

    // Увеличиваем цену каждого товара на 10%
    foreach ($cart->get_cart() as $cart_item_key => $cart_item) {
        $original_price = $cart_item['data']->get_regular_price();
        $new_price = $original_price * 1.10; // +10%
        $cart_item['data']->set_price($new_price);
    }
}

Обратите внимание:

Как сделать так, чтобы цена менялась только при определённом способе оплаты?

Способ оплаты выбирается клиентом на странице оформления заказа, и сохраняется в сессии WooCommerce. В приведённом коде мы это учитываем через WC()->session->get('chosen_payment_method'). Для отработки этого изменения корректно нужно, чтобы корзина пересчитывалась после выбора способа оплаты.

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

  1. Перейдите в корзину и выберите способ оплаты, для которого настроено изменение цены (например, "Наложенный платеж");
  2. Обратите внимание на стоимость товаров и итоговую сумму — в ней должна отразиться наценка 10%;
  3. При смене способа оплаты на другой — цена должна вернуться к исходной;
  4. Создайте заказ и проверьте, что цена в заказе соответствует изменённой цене в корзине.

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

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

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

add_action('woocommerce_before_calculate_totals', 'change_price_based_on_payment_and_currency', 10, 1);
function change_price_based_on_payment_and_currency($cart) {
    if (is_admin() && !defined('DOING_AJAX')) {
        return;
    }

    $chosen_payment = WC()->session->get('chosen_payment_method');
    if ($chosen_payment !== 'paypal') {
        return;
    }

    // Пример получения курса валюты (фиксированное значение)
    $usd_to_rub = 75; // курс, можно получать из API

    foreach ($cart->get_cart() as $cart_item) {
        $base_price = $cart_item['data']->get_regular_price();
        // Допустим, товар в USD, меняем на RUB
        $new_price = $base_price * $usd_to_rub;
        $cart_item['data']->set_price($new_price);
    }
}

Таблица сравнения способов изменения цены товаров при оплате

МетодОписаниеПлюсыМинусы
Изменение цены в woocommerce_before_calculate_totalsДинамическое изменение цены в корзинеГибкость, работает до создания заказаНужно контролировать вызовы, возможно, конфликт с плагинами
Использование купоновДобавление скидок через купоныПростота, встроено в WooCommerceМенее гибко, не позволяет изменять цену произвольно
Изменение цены в самом заказе (после создания)Редактирование цены в админке или через хуки заказаПодходит для исправлений после оформленияНе влияет на корзину и интерфейс клиента
Как удалить авторизованного пользователя без пароля в WordPress
12.02.2026
Как создать простой шорткод для вывода отзывов в WordPress
16.03.2026
Как запретить регистрацию на WordPress: функции и плагины для контроля доступа
26.01.2026
Как разделить длинный пост на страницы в WordPress: пошаговое руководство
05.04.2026
Как кастомизировать страницу входа в WordPress: плагины и код
30.03.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше