हमारे सभी कूपनों के उपयोग में आने वाले अनेक कूपनों को रोकने के लिए हमारे पास "व्यक्तिगत उपयोग" है।

एक अपवाद है जहां हमें इन "व्यक्तिगत उपयोग" कूपनों को किसी अन्य विशिष्ट कूपन के लिए उपयोग करने योग्य बनाने की आवश्यकता है।

उदाहरण के लिए:

कुल ३ कूपन: स्वागत १० - व्यक्तिगत उपयोग - १०% की छूट

वेलकम १० और वेलकम २० वैलिडेशन को विफल कर देंगे जैसा कि वर्तमान में होता है, वेलकम १० या वेलकम २० का उपयोग वेलकम ३० के साथ किया जा सकता है।

तो स्वागत ३० अनिवार्य रूप से व्यक्तिगत_उपयोग के लिए सत्यापन को ओवरराइड करेगा।

क्या यह संभव है?

1
Harry Robinson 9 फरवरी 2021, 00:25

1 उत्तर

सबसे बढ़िया उत्तर

ध्यान दें कि WooCommerce कोड में उपयोग किया जाने वाला कूपन कोड कूपन स्लग है (इसलिए कोई कैपिटल नहीं और कोई सफेद स्थान नहीं)

इसलिए मैंने नीचे दिए गए कोड का परीक्षण 3 कूपन कोड Welcome10, Welcome20 और Welcome30 के साथ किया है, सभी 3 सेट "व्यक्तिगत उपयोग" विकल्प प्रतिबंध के साथ हैं (इसलिए कूपन कोड स्लग welcome10 हैं। , welcome20 और welcome30)।

वह कोड जो welcome30 कूपन कोड को welcome10 या welcome20 के साथ प्रयोग करने की अनुमति देता है:

add_filter( 'woocommerce_apply_individual_use_coupon', 'filter_apply_individual_use_coupon', 10, 3 );
function filter_apply_individual_use_coupon( $coupons_to_keep, $the_coupon, $applied_coupons ) {
    
    if ( $the_coupon->get_code() === 'welcome30' ) {
        foreach( $applied_coupons as $key => $coupon_code ) {
            if( in_array( $coupon_code, array('welcome10', 'welcome20') ) ) {
                $coupons_to_keep[$key] = $applied_coupons[$key];
            }
        }
    } elseif ( in_array( $the_coupon->get_code(), array('welcome10', 'welcome20') ) ) {
        foreach( $applied_coupons as $key => $coupon_code ) {
            if( $coupon_code == 'welcome30' ) {
                $coupons_to_keep[$key] = $applied_coupons[$key];
            }
        }
    }
    return $coupons_to_keep;
}


add_filter( 'woocommerce_apply_with_individual_use_coupon', 'filter_apply_with_individual_use_coupon', 10, 4 );
function filter_apply_with_individual_use_coupon( $apply, $the_coupon, $applied_coupon, $applied_coupons ) {
    if ( $the_coupon->get_code() === 'welcome-30' && in_array( $applied_coupon->get_code(), array('welcome10', 'welcome20') ) ) {
        $apply = true;
    } elseif ( in_array( $the_coupon->get_code(), array('welcome10', 'welcome20') ) && $applied_coupon->get_code() === 'welcome30' ) {
        $apply = true;
    }
    return $apply;
}

कोड एक्टिव चाइल्ड थीम (या एक्टिव थीम) के फंक्शन्स.php फाइल में जाता है। परीक्षण और काम करता है।

2
halfer 7 मार्च 2021, 01:26
यह अच्छी तरह से काम करता है लेकिन हमारे पास एकमात्र मुद्दा है:
 – 
Harry Robinson
12 फरवरी 2021, 15:45
अगर हम कार्ट में पहले वेलकम -10 (एकल उपयोग) लागू करते हैं तो वेलकम -30 लागू करें यह पूरी तरह से काम करता है! अगर हम पहले वेलकम -30 करते हैं तो वेलकम -10 (एकल उपयोग) लागू करें यह कार्ट से वेलकम -30 को हटा देता है।
 – 
Harry Robinson
12 फरवरी 2021, 15:54
यह कैसे काम करेगा यदि मेरे पास कूपन की एक सरणी थी जो एकल उपयोग कूपन की एक और सरणी के साथ संगत है?
 – 
Harry Robinson
12 फरवरी 2021, 19:46
इसका उत्तर एक टिप्पणी में नहीं दिया जा सकता है... कूपन की एक श्रृंखला के साथ यह जटिल हो जाएगा कि आप वास्तव में क्या पूछ रहे हैं। केवल एक चीज जिसे आप बदल सकते हैं, वह है array('welcome10', 'welcome20')एक बड़े सरणी के साथ जिसमें कई कूपन हैं।
 – 
LoicTheAztec
12 फरवरी 2021, 19:52