在 Woocommerce 购物车中自动应用或删除特定产品 ID 的优惠券
Auto apply or remove a coupon in Woocommerce cart for a specific product id
当购物车中有产品 ID 1362 时,我会自动应用优惠券,但是当有人添加另一个产品并删除 1362 时,优惠券仍然有效,如果没有 1362,如何通过删除优惠券来防止这种情况Woocommerce 购物车中的产品 ID ?
我知道我们可以将优惠券限制在某个产品上,但我不想这样,我希望仅当此购物车中有 ID 为 1362 的产品时,我的优惠券才会应用于所有产品购物车。
add_action( 'woocommerce_before_cart', 'bbloomer_apply_matched_coupons' );
function bbloomer_apply_matched_coupons() {
global $woocommerce;
$coupon_code = 'boxpersonnalisable';
if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;
foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
// this is your product ID
$autocoupon = array( 1362 );
if( in_array( $values['product_id'], $autocoupon ) ) {
add_filter('woocommerce_coupon_message','remove_msg_filter',10,3);
$woocommerce->cart->add_discount( $coupon_code );
wc_print_notices();
}
}
}
非常感谢
以下是让它在以下情况下工作的方法:
- 在将特定产品添加到购物车时添加特定的优惠券代码
- 从购物车中删除特定产品时删除特定应用的优惠券代码
- (在这两种情况下您都可以显示自定义通知)…
代码:
add_action( 'woocommerce_before_calculate_totals', 'auto_add_remove_coupon' );
function auto_add_remove_coupon( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$coupon_code = 'boxpersonnalisable';
$targeted_product_ids = array( 1362 );
$found = false;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ){
if( in_array( $cart_item['product_id'], $targeted_product_ids ) ){
$found = true;
break;
}
}
if ( ! $cart->has_discount( $coupon_code ) && $found ) {
$cart->add_discount( $coupon_code );
wc_clear_notices();
wc_add_notice( __("Your custom notice - coupon added (optional)","woocommerce"), 'notice');
} elseif ( $cart->has_discount( $coupon_code ) && ! $found ) {
$cart->remove_coupon( $coupon_code );
wc_clear_notices();
wc_add_notice( __("Your custom notice - coupon removed (optional)","woocommerce"), 'notice');
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效
当购物车中有产品 ID 1362 时,我会自动应用优惠券,但是当有人添加另一个产品并删除 1362 时,优惠券仍然有效,如果没有 1362,如何通过删除优惠券来防止这种情况Woocommerce 购物车中的产品 ID ?
我知道我们可以将优惠券限制在某个产品上,但我不想这样,我希望仅当此购物车中有 ID 为 1362 的产品时,我的优惠券才会应用于所有产品购物车。
add_action( 'woocommerce_before_cart', 'bbloomer_apply_matched_coupons' );
function bbloomer_apply_matched_coupons() {
global $woocommerce;
$coupon_code = 'boxpersonnalisable';
if ( $woocommerce->cart->has_discount( $coupon_code ) ) return;
foreach ( $woocommerce->cart->cart_contents as $key => $values ) {
// this is your product ID
$autocoupon = array( 1362 );
if( in_array( $values['product_id'], $autocoupon ) ) {
add_filter('woocommerce_coupon_message','remove_msg_filter',10,3);
$woocommerce->cart->add_discount( $coupon_code );
wc_print_notices();
}
}
}
非常感谢
以下是让它在以下情况下工作的方法:
- 在将特定产品添加到购物车时添加特定的优惠券代码
- 从购物车中删除特定产品时删除特定应用的优惠券代码
- (在这两种情况下您都可以显示自定义通知)…
代码:
add_action( 'woocommerce_before_calculate_totals', 'auto_add_remove_coupon' );
function auto_add_remove_coupon( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
$coupon_code = 'boxpersonnalisable';
$targeted_product_ids = array( 1362 );
$found = false;
// Loop through cart items
foreach ( $cart->get_cart() as $cart_item ){
if( in_array( $cart_item['product_id'], $targeted_product_ids ) ){
$found = true;
break;
}
}
if ( ! $cart->has_discount( $coupon_code ) && $found ) {
$cart->add_discount( $coupon_code );
wc_clear_notices();
wc_add_notice( __("Your custom notice - coupon added (optional)","woocommerce"), 'notice');
} elseif ( $cart->has_discount( $coupon_code ) && ! $found ) {
$cart->remove_coupon( $coupon_code );
wc_clear_notices();
wc_add_notice( __("Your custom notice - coupon removed (optional)","woocommerce"), 'notice');
}
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。已测试并有效