ई-कॉमर्स स्टोर में:
होमपेज पर प्रदर्शित आइटम हैं और प्रत्येक आइटम में उनके नीचे "कार्ट में जोड़ें" बटन है। जब यह बटन क्लिक किया जाता है, तो आइटम को कार्ट में जोड़ा जाता है। यदि इस बटन को फिर से क्लिक किया जाता है, तो आइटम की मात्रा जो पहले से ही कार्ट में मौजूद है, 1 से बढ़ जाती है। मेरा मानना है कि यह लूप है । अब तक सब ठीक है।
एकल उत्पाद पृष्ठ पर, "कार्ट में जोड़ें" बटन है। जब इस बटन पर क्लिक किया जाता है, तो आइटम कार्ट में जुड़ जाता है। एक क्वांटिटी इनपुट टेक्स्टबॉक्स है, जिसका उपयोग मात्रा को बदलने के लिए किया जा सकता है। यह ठीक भी है।
समस्या:
मुझे "कार्ट में जोड़ें" बटन के बीच अंतर करने की आवश्यकता है जो लूप के भीतर क्लिक की गई थी (वर्तमान में मुखपृष्ठ पर, लेकिन इसका उपयोग अन्य पृष्ठों जैसे कि आर्काइव पेज आदि पर भी किया जा सकता है) बनाम "Add to Cart" बटन पर क्लिक किया गया था एकल उत्पाद पृष्ठ पर। इस भेदभाव के आधार पर, यहाँ मुझे यह करने की आवश्यकता है:
- यदि लूप के भीतर दिखाई देने वाली "कार्ट में जोड़ें" बटन पर क्लिक किया गया था, तो इस आइटम की मात्रा को पकड़ें जो पहले से ही कार्ट का उपयोग करके मौजूद है
$cart_item_key
, इसे 1 से बढ़ाएं और इसे एक कस्टम फ़ंक्शन पर भेजें जो अतिरिक्त प्रसंस्करण करेगा और विवरण बचाएगा। फिर से गाड़ी चलाना। - यदि एकल उत्पाद पृष्ठ में प्रदर्शित "कार्ट में जोड़ें" बटन पर क्लिक किया गया था, तो इस आइटम की मात्रा को पकड़ो जो पहले से ही कार्ट का उपयोग करके मौजूद है
$cart_item_key
, इसे 3 से गुणा करें और इसे एक कस्टम फ़ंक्शन पर भेजें जो अतिरिक्त प्रसंस्करण करेगा और बचाएगा। फिर से गाड़ी चलाने का विवरण। - उपरोक्त दोनों मामलों में, अलग-अलग लॉजिक्स के आधार पर क्वांटिटी को बदला जा रहा है, और इस क्वांटिटी को कस्टम फ़ंक्शन कॉल पर भेजने की आवश्यकता है।
मैंने क्या कोशिश की:
मैंने निम्नलिखित कोड आज़माया:
add_action('woocommerce_add_to_cart', 'custom_action_add_to_cart', 20, 6);
function custom_action_add_to_cart($cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data)
{
$cart = WC()->cart->get_cart();
$product = wc_get_product($product_id);
// NEED TO RUN CUSTOM CODE HERE BASED ON THE CHECKS
if (add to cart within loop is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart + 1;
}
else if (add to cart on single product page is clicked) {
// Get existing $quantity_from_cart from cart using $cart_item_key, but how????
$new_quantity = $quantity_from_cart * 3;
}
// Need to send the $new_quantity along with the $cart_item_key to the custom function so that the data can be saved using $cart_item_key
my_custom_function($new_quantity, $cart_item_key);
}
function my_custom_function($new_quantity, $cart_item_key)
{
echo $new_quantity;
WC()->cart->cart_contents[$cart_item_key]['custom_quantity'] = $new_quantity;
WC()->cart->set_session();
}
उपरोक्त कोड के साथ मुद्दा यह है कि अगर मेरे पास if... else if...
तर्क नहीं है , तो कोड को "जहाजरानी गाड़ी में जोड़ें" बटन स्थित होने के बावजूद निष्पादित किया जाता है। दूसरे शब्दों में, चाहे मैं लूप में स्थित "कार्ट में जोड़ें" बटन पर क्लिक करता हूं (होमपेज, आर्काइव पेज या लूप का उपयोग करने वाले किसी भी पृष्ठ पर) या मैं एकल उत्पाद पृष्ठ में स्थित "कार्ट में जोड़ें" बटन पर क्लिक करता हूं उपरोक्त कोड if... else if...
तर्क की अनुपस्थिति में निष्पादित किया जाता है।
इसलिए, मैं अलग कोड चलाना चाहता हूं जब "Add to Cart" बटन जो लूप में स्थित होता है, उस पर क्लिक किया जाता है (चाहे उसका स्थान, चाहे होमपेज, अभिलेखागार, आदि) और "Add to Cart" बटन पर अलग-अलग कोड चलाएं। जो एकल उत्पाद पृष्ठ पर स्थित है उस पर क्लिक किया जाता है। इसे कैसे प्राप्त किया जा सकता है?
कुछ इस तरह की उम्मीद:
- यदि लूप के अंदर दिखाई देने वाले बटन पर क्लिक किया जाता है -> ऐसा करें।
- यदि एकल उत्पाद पृष्ठ में दिखाई देने वाले बटन पर क्लिक किया जाता है -> ऐसा करें।