如何在结帐时对 woocommerce 小计和总计应用折扣?

How to apply discount on woocommerce subtotal and total on checkout?

我们正在尝试这种类型的代码,它会更改小计,但我们希望根据小计更改总计,而不按顺序添加任何折扣字段 table。

// define the woocommerce_cart_subtotal callback 
function filter_woocommerce_cart_subtotal( $array, $int, $int ) { 
// make filter magic happen here... 
};       
// add the filter 
add_filter( 'woocommerce_cart_subtotal', 'filter_woocommerce_cart_subtotal', 10, 3 );

好吧,你用错了钩子。该筛选器是更改显示小计。

你需要的是:

add_action( 'woocommerce_calculate_totals', 'woocommerce_calculate_totals', 30 );
function woocommerce_calculate_totals( $cart ) {
    // make magic happen here... 
    // use $cart object to set or calculate anything.

    if ( 'excl' === $cart->tax_display_cart ) {
        $cart->subtotal_ex_tax  = 400;
    } else {
        $cart->subtotal = 350;
    }

}

以上将导致小计显示为 350 或 400,具体取决于您的税收设置,但无论购物车中有什么产品。因为我们在设置小计时没有逻辑。添加您自己的逻辑。

您也可以使用 woocommerce_after_calculate_totals 使用与上述相同的概念。

add_action( 'woocommerce_after_calculate_totals', 'woocommerce_after_calculate_totals', 30 );
function woocommerce_after_calculate_totals( $cart ) {
    // make magic happen here... 
    // use $cart object to set or calculate anything.

    if ( 'excl' === $cart->tax_display_cart ) {
        $cart->subtotal_ex_tax  = 400;
    } else {
        $cart->subtotal = 350;
    }
    $cart->total = 50;

}