我想设置最大百分比类型的优惠券折扣,例如总订单的15%,但最高$ 150。我已成功将其更新到我的购物车,因此最高显示$ 150。但是在保存后,该订单不会收取$ 150,但会重新计算总订单x 15%,而忽略了我在购物车上设置的折扣($ 150)。
下面是我使用的代码:
/**
* Update subtotal with max discount set previously
* @return string Subtotal with currency
*/
add_filter( 'woocommerce_cart_subtotal', 'woocommerce_set_max_discount', 10, 3 );
function woocommerce_set_max_discount( $subtotal, $compound, $cart ) {
// Get current Coupons
$coupons = $cart->coupon_discount_totals;
foreach($coupons as $coupon_code => $discount) {
$coupon = new WC_Coupon($coupon_code);
// Check max discount
$max_discount = get_post_meta( $coupon->get_id(), '_max_discount', true );
if($max_discount) {
// Current discount > max discount
if($discount > $max_discount) {
// Set discount to max discount
$coupons[$coupon_code] = $max_discount;
$need_update = true;
}
}
}
// Get total discount
$total_discount = 0;
foreach($coupons as $coupon_code => $discount) {
$total_discount += $discount;
}
$total_content = $cart->get_subtotal() - $total_discount;
// Update Cart's data
// $cart->set_applied_coupons($coupons);
$cart->set_discount_total($total_discount);
$cart->set_cart_contents_total($total_content);
$cart->set_total( $cart->get_subtotal() - $total_discount + $cart->get_fee_total());
$cart->coupon_discount_totals = $coupons;
return $subtotal;
}