WooCommerce运费价格包含税

时间:2015-07-10 08:27:13

标签: php wordpress woocommerce

在WooCommerce中,我只能输入不含税的运费。 如何才能使包含税的给定价格?

显示价格的设置,包括税收'仅适用于产品。

例如,如果我输入运费€1,00的设置 它在结账时显示€1,21(0,21 =税)

应该是€1,00(含税0,21税) (不要在这里关心计算,它只是一个例子)

感谢任何人都有解决方案或功能。

3 个答案:

答案 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选项卡下。设置税率时,您还需要检查"运输"复选框。

enter image description here

答案 2 :(得分:0)

一个可能的替代解决方案是手动调整运输价格,使其成为增值税专用。即如果运费含20%的税为6欧元,则将其调整为5欧元。请注意,这仅在所有送货目的地的税率相同时有效。