我们希望对某些 WooCommerce 产品(特定类别)进行免税。目前,我们为来自澳大利亚的买家创建了一个税级。我想让它免税,即使它来自澳大利亚或其他地方。
我创建了一个零税率的新类并尝试此自定义代码:
function change_tax_for_specific_cat_product( $id ) {
$product = wc_get_product( $id );
if ( $product && $product instanceof WC_Product ) {
// Array of category IDs for which we want to set 'Zero rate'
$zero_tax_categories = array( 30, 32, 29, 34, 28 ); // Add other category IDs as needed
// Check if the product belongs to any of the specified categories
if ( has_term( $zero_tax_categories, 'product_cat', $id ) ) {
$product->set_tax_class( 'Zero rate' );
} else {
$product->set_tax_class( 'Standard' );
}
// Temporarily remove the action to avoid recursion
remove_action( 'woocommerce_update_product', 'change_tax_for_specific_cat_product' );
$product->save();
// Re-add the action after saving
add_action( 'woocommerce_update_product', 'change_tax_for_specific_cat_product' );
}
}
add_action( 'woocommerce_update_product', 'change_tax_for_specific_cat_product' );
有没有更好的选择来实现这个功能。 另外,当没有应用税时,我不希望有价格后缀。
要根据产品类别和特定国家/地区(澳大利亚)更改产品税级,您可以使用以下内容:
// Utility function: check if product category handle zero rate tax class
function is_zero_rate_tax_class( $product_id ) {
return has_term( array(28, 29, 30, 32, 34), 'product_cat', $product_id );
}
// Conditional function: Check if the customer is from specific country code
function is_from_targeted_country( $country_code ) {
return WC()->customer->get_billing_country() === $country_code;
}
// Alter product tax class
add_filter( 'woocommerce_product_get_tax_class', 'filter_product_tax_class', 10, 2 );
add_filter( 'woocommerce_product_variation_get_tax_class', 'filter_product_tax_class', 10, 2 );
function filter_product_tax_class( $tax_class, $product ) {
$product_id = $product->get_parent_id() ?: $product->get_id();
if ( is_from_targeted_country('AU') && is_zero_rate_tax_class($product_id) ) {
return 'zero-rate';
}
return $tax_class;
}
// Alter cart items tax class (and order items too)
add_action( 'woocommerce_before_calculate_totals', 'alter_cart_items_tax_rate', 20, 1 );
function alter_cart_items_tax_rate( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( ! is_from_targeted_country('AU') )
return;
// Loop through cart items
foreach ( $cart->get_cart() as $item ) {
if ( is_zero_rate_tax_class($item['product_id']) ) {
$item['data']->set_tax_class('zero-rate');
}
}
}
代码位于子主题的functions.php 文件中(或插件中)。应该可以。