根据 WooCommerce 中的产品类别和国家/地区排除产品税

问题描述 投票:0回答:1

我们希望对某些 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' );

有没有更好的选择来实现这个功能。 另外,当没有应用税时,我不希望有价格后缀。

php wordpress woocommerce product tax
1个回答
0
投票

要根据产品类别和特定国家/地区(澳大利亚)更改产品税级,您可以使用以下内容:

// 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 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.