删除 WooCommerce 中针对最小购物车总数和特定国家/地区的所有税费
Remove all taxes in WooCommerce for a min cart total and specific countries
我们需要对超过 150 欧元的英国订单收取 0 增值税,包括运费和支付网关费用,但不包括 20% 的正常增值税。
因此,如果英国居住地址以 130 的价格订购商品,运费和支付网关费用为 9,那么我们将收取增值税,因此客户支付 139+9+20% 的增值税,但是,如果订单为 130,运费和付款网关费用是 23 所以总共 153 没有增值税我们不收税。
我创建了这个,但它仍然对运费征税,而且 PayPal 附加费用也在征税,我的脑袋很碎,真的以为我会寻求建议。
add_action( 'woocommerce_before_calculate_totals','auto_add_tax_for_room', 10, 1 );
function auto_add_tax_for_room( $cart ) {
if ( is_admin() && ! defined('DOING_AJAX') ) return;
$shipping_country = WC()->customer->get_shipping_country();
$subtotal = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$subtotal += $cart_item['data']->get_price('edit') * $cart_item['quantity'];
}
$subtotal = intval($subtotal);
if($shipping_country!='GB' || $subtotal < 125) return;
$percent = 0;
// Calculation
$surcharge = ( $cart->cart_contents_total + $cart->shipping_total ) * $percent / 100;
// Add the fee (tax third argument disabled: false)
foreach ( $cart->get_cart() as $cart_item ) {
// get product price
$price = $cart_item['data']->get_price();
$cart_item['data']->set_tax_class( 'Zero rate' ); // Above 2500
}
return;
}
挂钩 woocommerce_before_calculate_totals
仅适用于购物车商品,这里的税收 class 仅适用于产品,因为 $cart_item['data']
是 WC_Product
对象。
如果您的产品价格设置为不含税,则还有另一种更简单的选择,它会在满足您的条件时免除所有税费。
请尝试以下操作:
add_action( 'woocommerce_calculate_totals', 'set_customer_tax_exempt' );
function set_customer_tax_exempt( $cart ) {
if ( is_admin() && ! defined('DOING_AJAX') )
return;
$min_amount = 150; // Minimal cart amount
$countries = array('GB'); // Defined countries array
$subtotal = floatval( $cart->cart_contents_total );
$shipping = floatval( $cart->shipping_total );
$fees = floatval( $cart->fee_total );
$total = $subtotal + $shipping + $fees; // cart total (without taxes including shipping and fees)
$country = WC()->customer->get_shipping_country();
$country = empty($country) ? WC()->customer->get_billing_country() : $country;
$vat_exempt = WC()->customer->is_vat_exempt();
$condition = in_array( $country, $countries ) && $total >= $min_amount;
if ( $condition && ! $vat_exempt ) {
WC()->customer->set_is_vat_exempt( true ); // Set customer tax exempt
} elseif ( ! $condition && $vat_exempt ) {
WC()->customer->set_is_vat_exempt( false ); // Remove customer tax exempt
}
}
add_action( 'woocommerce_thankyou', 'remove_customer_tax_exempt' );
function remove_customer_tax_exempt( $order_id ) {
if ( WC()->customer->is_vat_exempt() ) {
WC()->customer->set_is_vat_exempt( false );
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
感谢 LoicTheAztec 的帮助,我做了一些更改,最终使用以下内容并解决了英国税收问题
add_action( 'woocommerce_before_calculate_totals','auto_add_tax_for_room', 10, 1 );
function auto_add_tax_for_room( $cart ) {
if ( is_admin() && ! defined('DOING_AJAX') ) return;
$shipping_country = WC()->customer->get_shipping_country();
$subtotal = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$subtotal += $cart_item['data']->get_price('edit') * $cart_item['quantity'];
}
$subtotal = intval($subtotal);
if($shipping_country!='GB' || $subtotal < 125) return;
$percent = 0;
// Calculation
$surcharge = ( $cart->cart_contents_total + $cart->shipping_total ) * $percent / 100;
// Add the fee (tax third argument disabled: false)
foreach ( $cart->get_cart() as $cart_item ) {
// get product price
$price = $cart_item['data']->get_price();
$cart_item['data']->set_tax_class( 'Zero rate' );
}
return;
}
function flat_rates_cost( $rates, $package ) {
$shipping_country = WC()->customer->get_shipping_country();
$subtotal = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$subtotal += $cart_item['data']->get_price('edit') * $cart_item['quantity'];
}
$subtotal = intval($subtotal);
if($shipping_country!='GB' || $subtotal < 125) return $rates;
foreach ( $rates as $rate_key => $rate ){
if ( 'free_shipping' !== $rate->method_id ) {
$has_taxes = false;
$taxes = [];
// Taxes rate cost (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
$has_taxes = true;
$taxes[$key] = 0; // Set to 0 (zero)
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = 0;
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'flat_rates_cost', 10, 2 );
我们需要对超过 150 欧元的英国订单收取 0 增值税,包括运费和支付网关费用,但不包括 20% 的正常增值税。
因此,如果英国居住地址以 130 的价格订购商品,运费和支付网关费用为 9,那么我们将收取增值税,因此客户支付 139+9+20% 的增值税,但是,如果订单为 130,运费和付款网关费用是 23 所以总共 153 没有增值税我们不收税。
我创建了这个,但它仍然对运费征税,而且 PayPal 附加费用也在征税,我的脑袋很碎,真的以为我会寻求建议。
add_action( 'woocommerce_before_calculate_totals','auto_add_tax_for_room', 10, 1 );
function auto_add_tax_for_room( $cart ) {
if ( is_admin() && ! defined('DOING_AJAX') ) return;
$shipping_country = WC()->customer->get_shipping_country();
$subtotal = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$subtotal += $cart_item['data']->get_price('edit') * $cart_item['quantity'];
}
$subtotal = intval($subtotal);
if($shipping_country!='GB' || $subtotal < 125) return;
$percent = 0;
// Calculation
$surcharge = ( $cart->cart_contents_total + $cart->shipping_total ) * $percent / 100;
// Add the fee (tax third argument disabled: false)
foreach ( $cart->get_cart() as $cart_item ) {
// get product price
$price = $cart_item['data']->get_price();
$cart_item['data']->set_tax_class( 'Zero rate' ); // Above 2500
}
return;
}
挂钩 woocommerce_before_calculate_totals
仅适用于购物车商品,这里的税收 class 仅适用于产品,因为 $cart_item['data']
是 WC_Product
对象。
如果您的产品价格设置为不含税,则还有另一种更简单的选择,它会在满足您的条件时免除所有税费。
请尝试以下操作:
add_action( 'woocommerce_calculate_totals', 'set_customer_tax_exempt' );
function set_customer_tax_exempt( $cart ) {
if ( is_admin() && ! defined('DOING_AJAX') )
return;
$min_amount = 150; // Minimal cart amount
$countries = array('GB'); // Defined countries array
$subtotal = floatval( $cart->cart_contents_total );
$shipping = floatval( $cart->shipping_total );
$fees = floatval( $cart->fee_total );
$total = $subtotal + $shipping + $fees; // cart total (without taxes including shipping and fees)
$country = WC()->customer->get_shipping_country();
$country = empty($country) ? WC()->customer->get_billing_country() : $country;
$vat_exempt = WC()->customer->is_vat_exempt();
$condition = in_array( $country, $countries ) && $total >= $min_amount;
if ( $condition && ! $vat_exempt ) {
WC()->customer->set_is_vat_exempt( true ); // Set customer tax exempt
} elseif ( ! $condition && $vat_exempt ) {
WC()->customer->set_is_vat_exempt( false ); // Remove customer tax exempt
}
}
add_action( 'woocommerce_thankyou', 'remove_customer_tax_exempt' );
function remove_customer_tax_exempt( $order_id ) {
if ( WC()->customer->is_vat_exempt() ) {
WC()->customer->set_is_vat_exempt( false );
}
}
代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。
感谢 LoicTheAztec 的帮助,我做了一些更改,最终使用以下内容并解决了英国税收问题
add_action( 'woocommerce_before_calculate_totals','auto_add_tax_for_room', 10, 1 );
function auto_add_tax_for_room( $cart ) {
if ( is_admin() && ! defined('DOING_AJAX') ) return;
$shipping_country = WC()->customer->get_shipping_country();
$subtotal = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$subtotal += $cart_item['data']->get_price('edit') * $cart_item['quantity'];
}
$subtotal = intval($subtotal);
if($shipping_country!='GB' || $subtotal < 125) return;
$percent = 0;
// Calculation
$surcharge = ( $cart->cart_contents_total + $cart->shipping_total ) * $percent / 100;
// Add the fee (tax third argument disabled: false)
foreach ( $cart->get_cart() as $cart_item ) {
// get product price
$price = $cart_item['data']->get_price();
$cart_item['data']->set_tax_class( 'Zero rate' );
}
return;
}
function flat_rates_cost( $rates, $package ) {
$shipping_country = WC()->customer->get_shipping_country();
$subtotal = 0;
foreach ( WC()->cart->get_cart() as $cart_item ) {
$subtotal += $cart_item['data']->get_price('edit') * $cart_item['quantity'];
}
$subtotal = intval($subtotal);
if($shipping_country!='GB' || $subtotal < 125) return $rates;
foreach ( $rates as $rate_key => $rate ){
if ( 'free_shipping' !== $rate->method_id ) {
$has_taxes = false;
$taxes = [];
// Taxes rate cost (if enabled)
foreach ($rates[$rate_key]->taxes as $key => $tax){
if( $tax > 0 ){
$has_taxes = true;
$taxes[$key] = 0; // Set to 0 (zero)
}
}
if( $has_taxes )
$rates[$rate_key]->taxes = 0;
}
}
return $rates;
}
add_filter( 'woocommerce_package_rates', 'flat_rates_cost', 10, 2 );