根据Woocommerce中的购物车商品价格有条件地设置不同的税率

时间:2017-07-06 13:52:35

标签: php wordpress woocommerce cart tax

在我的Wordpress电子商务网站中,我使用 WP酒店预订,这是一个酒店客房预订插件。结帐流程使用 WooCommerce 完成。

问题:我们有不同的房间,价格不同。例如:

  • 房间A价格 - 1500
  • 房间B价格 - 2700
  • 房间价格 - 2200

对于价格低于2500的房间,GST税率设定为12%,对于2500以上的房间,则为18%。

由于我对此自定义产品(房间管理)使用 WP酒店预订,我无法使用woocommerce中的附加税类选项来设置不同的税级

我需要你的帮助来编写一个功能来检查房间价值,然后决定需要为给定房间设定什么税。

谢谢

1 个答案:

答案 0 :(得分:1)

这是易于理解的事情。

1°)您需要在WooCommerce Tax设置中创建2个新的税级。在此示例中,我将税级命名为“ Tax 12 ”和“ Tax 18 ”。然后,对于每个人,您必须设置不同百分比的 12% 18%

2°)现在,这是一个隐藏在 woocommerce_before_calculate_totals 动作挂钩中的自定义函数,它将根据产品价格应用税级。我不使用税级类名称但税级类别slu ,它们是小写的,空格用连字符替换。

所以这是代码:

add_action( 'woocommerce_before_calculate_totals', 'change_cart_items_prices', 10, 1 );
function change_cart_items_prices( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )
        return;

    if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
        return;

    foreach ( $cart->get_cart() as $cart_item ) {
        // get product price
        $price = $cart_item['data']->get_price();

        // Set conditionaly based on price the tax class
        if ( $price < 2500 )
            $cart_item['data']->set_tax_class( 'tax-12' ); // below 2500
        if ( $price >= 2500 )
            $cart_item['data']->set_tax_class( 'tax-18' ); // Above 2500
    }
}

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码已经过测试,适用于WooCommerce版本3 +