Сделайте налог платным WooCommerce в зависимости от платежного шлюза и страны

Этот код добавляет комиссию 29, когда PayPal выбран на странице оформления заказа для определенной страны. Тем не менее, это не облагается налогом. Общая сумма налога в настоящее время основана на пунктах + доставка.

Как я собираюсь добавить налог в таможенную пошлину без двойного налогообложения людей?

Это мой код:

function woocommerce_custom_fee( ) {
global $woocommerce;

$county = array('SE');
if ( ( is_admin() && ! defined( 'DOING_AJAX' ) ) || ! is_checkout() )
return;

$chosen_gateway = $woocommerce->session->chosen_payment_method ;

$fee = 29;if ( $chosen_gateway == 'paypal' and ( in_array( WC()->customer->get_shipping_country(), $county ) )  ) { //test with paypal method
$woocommerce->cart->add_fee( 'Paypal Avgift', $fee, false, '' );
}
}
add_action( 'woocommerce_cart_calculate_fees','woocommerce_custom_fee' );
function cart_update_script() {
if (is_checkout()) :
?>
<script>
jQuery( function( $ ) {

// woocommerce_params is required to continue, ensure the object exists
if ( typeof woocommerce_params === 'undefined' ) {
return false;
}

$checkout_form = $( 'form.checkout' );

$checkout_form.on( 'change', 'input[name="payment_method"]', function() {
$checkout_form.trigger( 'update' );
});});
</script>
<?php
endif;
}
add_action( 'wp_footer', 'cart_update_script', 999 );

Спасибо

2

Решение

Чтобы включить налог в WC_Cart add_fee() метод, вам нужно установить третий аргумент true.
Вы можете удалить последний аргумент, так как он уже является значением по умолчанию.

В woocommerce_cart_calculate_fees Хук действия, вы можете использовать непосредственно аргумент объекта корзины $cart_obj то есть включить в него.

Также global $woocommerce был заменен WC() объект, который включает его (так что не нужно больше объявлять global $woocommerce.

Ниже я очистил и переупорядочил вашу первую подключенную функцию, попробуйте (это будет действовать как ваше, и плата будет облагаться налогом):

add_action( 'woocommerce_cart_calculate_fees','conditional_payment_mothod_custom_fee', 10, 1 );
function conditional_payment_mothod_custom_fee( $cart_obj ) {

if ( is_admin() && ! defined( 'DOING_AJAX' ) || ! is_checkout() )
return;

$fee = 19;
$target_county = 'SE';
$chosen_gateway = WC()->session->chosen_payment_method;
$shipping_country = WC()->customer->get_shipping_country();

// Enabling fee with paypal method (and 'SE' country)
if('paypal' == $chosen_gateway && $shipping_country == $target_county)
$cart_obj->add_fee( __('Paypal Avgift'), $fee, true ); // Tax enabled for the fee
}

Вот $cart_obj действовать так же, как $woocommerce->cart или же WC()->cart

Теперь во второй функции вы можете использовать ярлык jQuery change() и вы можете сделать свой код более современным и компактным, таким образом:

add_action( 'wp_footer', 'checkout_update_script', 999 );
function checkout_update_script() {
if ( is_checkout() ) :
?>
<script>
jQuery( function($){
// Checking that the variable "woocommerce_params" is defined to continue
if ( 'undefined' === typeof woocommerce_params )
return false;

$('form.checkout').change('input[name="payment_method"]', function(){
$(this).trigger( 'update' );
});
});
</script>
<?php
endif;
}

Код помещается в файл function.php вашей активной дочерней темы (или темы) или также в любой файл плагина.

Этот код протестирован и работает на версиях WooCommerce 2.6.x и 3.0+

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]