在WooCommerce中,我只能输入不含税的运费。 如何才能使包含税的给定价格?
显示价格的设置,包括税收'仅适用于产品。
例如,如果我输入运费€1,00的设置 它在结账时显示€1,21(0,21 =税)
应该是€1,00(含税0,21税) (不要在这里关心计算,它只是一个例子)
感谢任何人都有解决方案或功能。
答案 0 :(得分:3)
在原始问题发生一年之后,我遇到了同样的问题,而且没有太多帮助。
经过调查,结果证明来自" class-wc-tax.php"的运费税计算存在问题。正如您在下面看到的硬编码运费是税收专属。
/**
* Calculate the shipping tax using a passed array of rates.
*
* @param float Price
* @param array Taxation Rate
* @return array
*/
public static function calc_shipping_tax( $price, $rates ) {
$taxes = self::calc_exclusive_tax( $price, $rates );
return apply_filters( 'woocommerce_calc_shipping_tax', $taxes, $price, $rates );
}
事实证明,由于某种原因,woo已经通过下游税计算推动了这种运输假设的税收,因此您需要在您的functions.php中添加几个过滤器以便解决问题。
1)第一个计算包容性税
function yourname_fix_shipping_tax( $taxes, $price, $rates) {
if(wc_prices_include_tax()){
return WC_Tax::calc_inclusive_tax( $price, $rates );
}
return $taxes;
}
add_filter( 'woocommerce_calc_shipping_tax', 'yourname_fix_shipping_tax',10,3);
小心你不要忘记add_filter结束时的10,3。 10是我在默认情况下保留的优先级。 3是参数的数量。你真的需要这个 - 过滤器显示行为问题,如果你把它留下来。
2)第二个过滤器是将总数固定在下游计算中。
function yourname_fix_totals( $cart) {
if(wc_prices_include_tax()){
$cart->shipping_total -= $cart->shipping_tax_total;
}
}
add_filter( 'woocommerce_calculate_totals', 'yourname_fix_totals');
第一个过滤器非常直接 - 它只是在包含的情况下重新计算税。
第二个过滤器用于处理将独家税的假设进一步推入税收计算的过程。
' class-wc-cart.php'的第1396行。我们有以下内容。
// Grand Total - Discounted product prices, discounted tax, shipping cost + tax
$this->total = max( 0, apply_filters( 'woocommerce_calculated_total', round( $this->cart_contents_total + $this->tax_total + $this->shipping_tax_total + $this->shipping_total + $this->fee_total, $this->dp ), $this ) );
我们想要做的是将运费税添加到我们不希望它做的运费总额中 - 并且他们已经硬编码了......
我们要做的是使用位置便利的' woocommerce_calculate_totals'过滤()在第1392行附近的几行,在使用上面的第二个过滤器加起来之前,从总数中减去运费税。
// Allow plugins to hook and alter totals before final total is calculated
do_action( 'woocommerce_calculate_totals', $this );
在几个星期前的这篇文章的早期版本中,我担心这会是一堆蠕虫 - 而现在我已经可以测试它了。
这里巨大警告。彻底测试您的最终税金总额和小计 - 这不再是风险。 Woo 已经做出了税收专属运输的假设,并且已经推动了它的下游计算。不幸的是,即使您的代码中存在错误,您也 向各自的政府纳税。
在测试时,请记住,当您在woocommerce设置中将独家税改为包含税时,旧价格不受影响,因此您可能需要使用干净的测试数据。
到目前为止所说的一切看起来对我来说还不错,但在我的情况下我绕过了大量的woo - 我没有使用他们的任何前端代码,这意味着我可能没有发现其他地方受到影响税收专属运输的假设。
答案 1 :(得分:2)
实际上它在Tax选项卡下。设置税率时,您还需要检查"运输"复选框。
答案 2 :(得分:0)
一个可能的替代解决方案是手动调整运输价格,使其成为增值税专用。即如果运费含20%的税为6欧元,则将其调整为5欧元。请注意,这仅在所有送货目的地的税率相同时有效。