基于折扣后价格调整WooCommerce购物车商品税率
解决WooCommerce按折扣后价格动态设置GST税率的问题
你的代码失效原因很明确:你拿商品原价判断税率,而不是折扣后的实际结算价格,所以折扣生效后税率自然不会跟着变。
修正思路:
- 从购物车项中获取折扣后的单商品实际价格,用
$cart_item['line_total'](该商品的折扣后总价)除以购买数量得到单个价格 - 用更严谨的条件判断来设置对应税类
- 确保后台已经创建并配置好
5% GST和12% GST这两个税类
修正后的完整代码:
add_action( 'woocommerce_before_calculate_totals', 'change_cart_items_tax_based_on_discounted_price', 10, 1 ); function change_cart_items_tax_based_on_discounted_price( $cart ) { if ( is_admin() && ! defined( 'DOING_AJAX' ) ) return; if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 ) return; foreach ( $cart->get_cart() as $cart_item ) { // 获取折扣后的单商品实际价格 $discounted_price = $cart_item['line_total'] / $cart_item['quantity']; // 根据折扣后价格设置对应税类 if ( $discounted_price < 1000 ) { $cart_item['data']->set_tax_class( '5% GST' ); } else { $cart_item['data']->set_tax_class( '12% GST' ); } } }
补充说明:
- 无论是商品本身的折扣还是优惠券折扣,
line_total都会自动计算出折扣后的金额,这个取值方式是准确的 - 务必在WooCommerce后台的设置→税费→税类中确认存在
5% GST和12% GST,且每个税类对应的税率规则已正确配置
内容的提问来源于stack exchange,提问作者Prashanth Gowda
相关产品推荐
相关产品推荐

