Woocommerce优惠券在购物车和结帐页面上自动应用

Woocommerce优惠券在购物车和结帐页面上自动应用,woocommerce,checkout,coupon,Woocommerce,Checkout,Coupon,我需要一个优惠券自动应用时,一个产品选择一个自定义字段(作为自定义字段复选框)。如果在该产品中勾选了该复选框,则woo commerce优惠券应自动应用于购物车和结帐页面。我已为其编写了自定义代码,其工作正常。但如果未选中该复选框,且客户来到结帐页面,则会有一个默认的应用优惠券代码输入框,如果客户把相同的优惠券放在一起,然后申请,优惠券就会被申请,但不应该。优惠券是在后端创建的 代码是: add_action( 'woocommerce_before_checkout_form', 'apply

我需要一个优惠券自动应用时,一个产品选择一个自定义字段(作为自定义字段复选框)。如果在该产品中勾选了该复选框,则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时,不应应用优惠券。

代码包含

  • 检查优惠券是否有效
  • 将其中一个WC_优惠券错误代码映射到消息字符串。()
函数我的优惠券是有效的($valid,$coupon){
$优惠券代码='promo25';
//如果选中复选框
如果($优惠券代码!='promo25'&复选框…){
$valid=false;
}
返回$valid;
}
添加过滤器('woocommerce\u优惠券有效','my\u优惠券有效',10,2);
函数优惠券错误($err,$err\u代码,$优惠券){
$优惠券代码='promo25';
// https://docs.woocommerce.com/wc-apidocs/source-class-WC_Coupon.html#947    
如果($优惠券\代码==$优惠券->获取\代码()&&intval($err\代码===WC\优惠券::E\ WC\优惠券\无效\过滤)){
$err=uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;
}
返回$err;
}
添加_过滤器('woocommerce_优惠券错误','my_优惠券错误',10,3);

也许负费用是更好的选择?