更改 Woocommerce 中某些购物车商品的税率

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

我正在 Wocommerce 购物车中插入一个控件,该控件根据用户的某些属性和插入的商品修改该特定商品的税率。

我在插件内使用的代码如下:

add_action('woocommerce_before_calculate_totals', 'switch_product_tax_class_in_cart', 10, 1);
/**
 * @param $cart
 */
function switch_product_tax_class_in_cart($cart)
{
    foreach ($cart->get_cart() as $cart_item) {
        if (isUserAgevolabile() && get_field('product_agevolabile', $cart_item['product_id'])) {
            $cart_item['data']->set_tax_class('iva-4');
        }
    }

}

不幸的是,这不起作用。

我还使用函数

set_price()
进行了测试,但这工作正常。

此外,我已经以这种方式更改了产品列表/产品页面中的税级,并且它有效:

add_filter('woocommerce_product_get_tax_class', 'switch_product_tax_class', 1, 2);
add_filter('woocommerce_product_variation_get_tax_class', 'switch_product_tax_class', 1, 2);

/**
 * @param $tax_class
 * @param $product
 * @return mixed
 */
function switch_product_tax_class($tax_class, $product)
{

    if (!is_cart() && isUserAgevolabile() && get_field('product_agevolabile')) {
        return 'iva-4';
    }

    return $tax_class;
}
php woocommerce hook-woocommerce cart tax
1个回答
0
投票

我通过这样编辑代码的第二部分解决了问题:

add_filter('woocommerce_product_get_tax_class', 'switch_product_tax_class', 1, 2);
add_filter('woocommerce_product_variation_get_tax_class', 'switch_product_tax_class', 1, 2);

/**
 * @param $tax_class
 * @param $product
 * @return mixed
 */
function switch_product_tax_class($tax_class, $product)
{

    if (!is_cart() && isUserAgevolabile() && get_field('product_agevolabile')) {
        return 'iva-4';
    }

    if (is_cart() || is_checkout()) {
        $product_id = $product->get_parent_id() ?: $product->get_id();

        if (isUserAgevolabile() && get_field('product_agevolabile', $product_id)) {
            return 'iva-4';
        }
    }

    return $tax_class;
}

不再需要第一部分(附加到动作

woocommerce_before_calculate_totals
)。

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