Вопрос или проблема
Я использую следующий код для применения скидки 5% для метода оплаты банковским переводом:
add_action('woocommerce_cart_calculate_fees', 'add_custom_checkout_fee_for_gateway');
function add_custom_checkout_fee_for_gateway() {
$chosen_gateway = WC()->session->get('chosen_payment_method');
if ($chosen_gateway == 'bacs') {
$cart_subtotal = WC()->cart->get_subtotal();
$discount = ($cart_subtotal * -0.05);
WC()->cart->add_fee('Money Transfer Discount (5%)', $discount, false, '');
}
}
Я установил третий параметр в false, чтобы убедиться, что НДС не применяется.
Мои транспортные расходы следующие:
- Стоимость доставки без НДС: ₺58.33
- Сумма НДС для доставки: ₺11.67
- Общая стоимость доставки с НДС: ₺70.00
Когда я применяю скидку за банковский перевод, сумма НДС за доставку обновляется до ₺11.28. Однако, я хочу, чтобы скидка применялась только к товарам в корзине, а не к расходам на доставку. Как я могу это исправить?
Ответ или решение
Ваша проблема связана с тем, что метод add_fee
в WooCommerce неявно изменяет сумму налога на доставку, хотя вы намерены применять скидку только к подытогу корзины, а не к стоимости доставки. Рассмотрим, как можно решить эту проблему, чтобы сохранить корректное налогообложение на доставку в вашем интернет-магазине на WooCommerce.
Анализ проблемы
В вашей функции add_custom_checkout_fee_for_gateway
, при выборе оплаты через банковский перевод, вы правильно вычисляете скидку на основании подытога корзины и добавляете её как отрицательный взнос с помощью метода add_fee
. Однако изменение налогооблагаемой базы (в вашем случае, применительно к подытогу корзины) приводит к изменению итоговой суммы налога на доставку. Чтобы это исправить, важно обеспечить раздельный учет налога на товары и налога на услуги доставки.
Решение
Для устранения влияния скидки на расчет НДС на доставку, вы можете воспользоваться следующим методом:
-
Корректировка функции расчета скидки: Удостоверьтесь, что скидка применяется только на товары в корзине без учета доставки.
-
Использование внутренних методов WooCommerce:
- Добавьте логическое условие для комбинирования скидок с категоризацией товарных позиций, чтобы четко различать, к чему применяется скидка.
- Применяйте
add_fee
, избегая воздействия на налогооблагаемую базу для доставки.
Пример кода для корректировки расчета скидки:
add_action('woocommerce_cart_calculate_fees', 'add_custom_checkout_fee_for_gateway', 10, 1);
function add_custom_checkout_fee_for_gateway($cart) {
if (is_admin() && !defined('DOING_AJAX')) return; // Избежать выполнения в админке
$chosen_gateway = WC()->session->get('chosen_payment_method');
if ('bacs' === $chosen_gateway) {
$cart_subtotal_ex_shipping = $cart->get_subtotal() - $cart->get_shipping_total();
$discount = ($cart_subtotal_ex_shipping * -0.05);
$cart->add_fee(__('Money Transfer Discount (5%)', 'textdomain'), $discount, false);
}
}
Важно учесть
- Не влияет на налогооблагаемую базу доставки: Третьим параметром у метода
add_fee
по-прежнему передаетсяfalse
, чтобы не учитывать НДС при расчете скидки. - Тестирование: Перед применением изменений в рабочей среде протестируйте логику на тестовом магазине.
Таким образом, вы сохраните воспользоваться скидкой, не затрагивая налогообложение услуги доставки. Это решение позволит обеспечить корректное расчётное поведение и улучшить пользовательский опыт в вашем интернет-магазине, повышая лояльность клиентов и их удовлетворенность.
Оптимизация для SEO: При использовании WooCommerce и методики предоставления скидок, ваши пользователи получат более точные подсчёты, особенно при использовании специфичных способов оплаты, таких как банковский перевод. Корректное управление налогами способствует повышению NMV (Net Merchandise Value) и снижает количество брошенных корзин, что является важными аспектами для SEO и UX.