"WC()->cart->get_subtotal()" returns 0 当使用 "woocommerce_product_get_tax_class" hook

"WC()->cart->get_subtotal()" returns 0 when using "woocommerce_product_get_tax_class" hook

当小计超过特定金额时,我正在尝试减少购物车商品的增值税。但是当我使用 WC()->cart->get_subtotal() 获取小计价格时,它 returns 0 并且我的 if 语句失败。

add_action( 'woocommerce_product_get_tax_class', 'wp_check_uk_vat', 1, 2 );
    
function wp_check_uk_vat( $tax_class, $product ) {

    $cart_total = WC()->cart->get_subtotal();
    // echo $cart_total;

    if( $cart_total >= 100 ) {

        $tax_class = "Zero rate";

    }

    return $tax_class;

}

这里使用了类似的代码:https://docs.woocommerce.com/document/setting-up-taxes-in-woocommerce/#section-18

该代码的目标是在订单金额超过 135 英镑时将增值税(不是运费)减到购物车(以遵守针对商家的新英国脱欧规则)。

因为 WC()->cart->get_subtotal() returns 0,if 语句失败,增值税没有被删除。

试试这个

add_action( 'woocommerce_product_get_tax_class', 'wp_check_uk_vat', 1, 2 );

function wp_check_uk_vat( $tax_class, $product ) {

    if(WC()->cart){
    $subtotal = 0;
    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $subtotal += $cart_item[ 'data' ]->get_price( 'edit' ) * $cart_item[ 'quantity' ];
    }

    if ( $subtotal >= 100 ) {

        $tax_class = "Zero rate";
    }
    }
    return $tax_class;
}