当产品在其中选择一个自定义字段(复选框作为自定义字段)时,我需要自动应用优惠券。如果在该产品中选中该复选框,则woo Commerce优惠券也应自动应用于购物车和结帐页面好吧..我已经为其编写了自定义代码,并且可以正常工作。但是,如果未选中此复选框并且客户进入结帐页面,则有一个默认的“应用优惠券”代码输入框,如果客户放置了相同的优惠券并应用了“优惠券已套用,但不可以。优惠券是在后端创建的。
代码是:
add_action( 'woocommerce_before_checkout_form', 'apply_matched_coupons');
function apply_matched_coupons() {
$coupon_code = 'promo25';
if (WC()->cart->has_discount($coupon_code))
return;
foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
// this is your product ID
$autocoupon = array(968);
if (in_array($cart_item['product_id'], $autocoupon)) {
if (isset($cart_item[WCPA_CART_ITEM_KEY])) {
foreach ($cart_item[WCPA_CART_ITEM_KEY] as $field) {
if ($field['name'] == 'carpet-steam1') {
WC()->cart->add_discount($coupon_code);
wc_print_notices();
}
}
}
}
}
}
在结帐页面上应用promo25时,不应应用优惠券。
答案 0 :(得分:0)
function my_coupon_is_valid( $valid, $coupon ) {
$coupon_code = 'promo25';
//if checkbox is checked
if( $coupon_code != 'promo25' && checkbox... ) ){
$valid = false;
}
return $valid;
}
add_filter( 'woocommerce_coupon_is_valid', 'my_coupon_is_valid', 10, 2);
function coupon_error( $err, $err_code, $coupon ) {
$coupon_code = 'promo25';
// https://docs.woocommerce.com/wc-apidocs/source-class-WC_Coupon.html#947
if( $coupon_code == $coupon->get_code() && intval($err_code) === WC_COUPON::E_WC_COUPON_INVALID_FILTERED ) ) {
$err = __( "Coupon $coupon_code don't work", "woocommerce" );
}
return $err;
}
add_filter('woocommerce_coupon_error', 'my_coupon_error', 10, 3);