如果小计低于最低金额,Woocommerce 不应用优惠券
Woocommerce do not apply coupon if subtotal below minimum amount
我有问题。
我有优惠券可以给我 15% 的折扣。
我还有最低 200 美元的送货方式。
我注意到如果我使用优惠券金额 ~ 200 美元,小计低于 200 美元并且优惠券送货方式有效。
我想创建一种方法来限制在小计低于 200 美元时不应用更智能的优惠券。
我正在尝试的代码是:
add_action( 'woocommerce_before_cart' , 'home_test_coupon_fix' );
add_action( 'woocommerce_before_checkout_form' , 'home_test_coupon_fix' );
function home_test_coupon_fix() {
$cart_total = WC()->cart->get_subtotal();
$coupon_id = 'hometest';
$minimum_amount = 200 + WC()->cart->get_coupon_discount_amount( 'hometest' );
$currency_code = get_woocommerce_currency();
wc_clear_notices();
echo $minimum_amount;
if ( $cart_total < $minimum_amount && $woocommerce->cart->applied_coupons === $coupon_id ) {
WC()->cart->remove_coupon( 'hometest' );
wc_print_notice( "Get 50% off if you spend more than $minimum_amount $currency_code!", 'notice' );
}
wc_clear_notices();
}
您的代码中存在一些错误。首先,您没有将 global $woocommerce;
声明为函数的开始。 $woocommerce->cart->applied_coupons
这将是数组,因此您必须传递密钥才能检查 hometest
add_action( 'woocommerce_before_cart' , 'home_test_coupon_fix' );
add_action( 'woocommerce_before_checkout_form' , 'home_test_coupon_fix' );
function home_test_coupon_fix() {
global $woocommerce;
$cart_total = WC()->cart->get_subtotal();
$coupon_id = 'hometest';
$minimum_amount = 500 + WC()->cart->get_coupon_discount_amount( $coupon_id );
$currency_code = get_woocommerce_currency();
wc_clear_notices();
if ( $cart_total < $minimum_amount && $woocommerce->cart->applied_coupons[0] === $coupon_id ) {
WC()->cart->remove_coupon( 'hometest' );
wc_print_notice( "Get 50% off if you spend more than $minimum_amount $currency_code!", 'notice' );
}
wc_clear_notices();
}
根据 OP 要求更新
您可以使用 woocommerce_coupon_message
过滤器挂钩删除优惠券消息。
function remove_coupon_message( $msg, $msg_code, $this ){
global $woocommerce;
$cart_total = WC()->cart->get_subtotal();
$coupon_id = 'hometest';
$minimum_amount = 500 + WC()->cart->get_coupon_discount_amount( $coupon_id );
$currency_code = get_woocommerce_currency();
wc_clear_notices();
if ( $cart_total <= $minimum_amount && $woocommerce->cart->applied_coupons[0] === $coupon_id ) {
return "";
}
return $msg;
}
add_filter('woocommerce_coupon_message','remove_coupon_message', 10,3 );
已测试并有效。
我有问题。 我有优惠券可以给我 15% 的折扣。 我还有最低 200 美元的送货方式。 我注意到如果我使用优惠券金额 ~ 200 美元,小计低于 200 美元并且优惠券送货方式有效。 我想创建一种方法来限制在小计低于 200 美元时不应用更智能的优惠券。
我正在尝试的代码是:
add_action( 'woocommerce_before_cart' , 'home_test_coupon_fix' );
add_action( 'woocommerce_before_checkout_form' , 'home_test_coupon_fix' );
function home_test_coupon_fix() {
$cart_total = WC()->cart->get_subtotal();
$coupon_id = 'hometest';
$minimum_amount = 200 + WC()->cart->get_coupon_discount_amount( 'hometest' );
$currency_code = get_woocommerce_currency();
wc_clear_notices();
echo $minimum_amount;
if ( $cart_total < $minimum_amount && $woocommerce->cart->applied_coupons === $coupon_id ) {
WC()->cart->remove_coupon( 'hometest' );
wc_print_notice( "Get 50% off if you spend more than $minimum_amount $currency_code!", 'notice' );
}
wc_clear_notices();
}
您的代码中存在一些错误。首先,您没有将 global $woocommerce;
声明为函数的开始。 $woocommerce->cart->applied_coupons
这将是数组,因此您必须传递密钥才能检查 hometest
add_action( 'woocommerce_before_cart' , 'home_test_coupon_fix' );
add_action( 'woocommerce_before_checkout_form' , 'home_test_coupon_fix' );
function home_test_coupon_fix() {
global $woocommerce;
$cart_total = WC()->cart->get_subtotal();
$coupon_id = 'hometest';
$minimum_amount = 500 + WC()->cart->get_coupon_discount_amount( $coupon_id );
$currency_code = get_woocommerce_currency();
wc_clear_notices();
if ( $cart_total < $minimum_amount && $woocommerce->cart->applied_coupons[0] === $coupon_id ) {
WC()->cart->remove_coupon( 'hometest' );
wc_print_notice( "Get 50% off if you spend more than $minimum_amount $currency_code!", 'notice' );
}
wc_clear_notices();
}
根据 OP 要求更新
您可以使用 woocommerce_coupon_message
过滤器挂钩删除优惠券消息。
function remove_coupon_message( $msg, $msg_code, $this ){
global $woocommerce;
$cart_total = WC()->cart->get_subtotal();
$coupon_id = 'hometest';
$minimum_amount = 500 + WC()->cart->get_coupon_discount_amount( $coupon_id );
$currency_code = get_woocommerce_currency();
wc_clear_notices();
if ( $cart_total <= $minimum_amount && $woocommerce->cart->applied_coupons[0] === $coupon_id ) {
return "";
}
return $msg;
}
add_filter('woocommerce_coupon_message','remove_coupon_message', 10,3 );
已测试并有效。