2016-10-03 13 views
5

मैं WooCommerce में सही हुक ढूंढ रहा हूं क्योंकि मुझे 100 पारंपरिक इकाइयों जैसे कुछ निश्चित गाड़ी तक पहुंचने पर कार्ट में प्रचारक उत्पाद जोड़ने की आवश्यकता है।एक निश्चित कार्ट राशि तक पहुंचने पर प्रचारक उत्पाद जोड़ना

मैंने हुक 'init' का भी उपयोग किया है, लेकिन मुझे नहीं लगता कि यह सही है।

function add_free_product_to_cart(){ 
    global $woocommerce; 
    $product_id = 2006; 
    $found = false; 
    if (sizeof($woocommerce->cart->get_cart()) > 0) 
    { 
     foreach ($woocommerce->cart->get_cart() as $cart_item_key => $values) 
     { 
      $_product = $values['data']; 
      if ($_product->id == $product_id) 
      $found = true; 
     } 
     if(!$found) 
     { 
      $maximum = 100; 
      $current = WC()->cart->subtotal; 
      if($current > $maximum){ 
       $woocommerce->cart->add_to_cart($product_id); 
      }   
     }  
    } 
} 
add_action('woocommerce_add_to_cart', 'add_free_product_to_cart'); 

जो हुक मैं उस उद्देश्य के लिए उपयोग करना चाहिए:

यहाँ मेरी कोड है?

या क्या आप मुझे कुछ इसी तरह की समस्या से संबंधित लिंक दे सकते हैं?

धन्यवाद

+0

खेद अद्यतन इस त्रुटि ADD_ACTION ('init', 'add_free_product_to_cart') होना चाहिए; –

उत्तर

8

आप गाड़ी में एक प्रचारक उत्पाद को जोड़ने के लिए एक निश्चित राशि गाड़ी लक्षित कर रहे हैं के रूप में, आप woocommerce_before_calculate_totals हुक का प्रयोग कर एक कस्टम निर्मित समारोह के साथ इस लक्ष्य को हासिल करने के लिए कर सकता है।

आप अगर ग्राहक अद्यतन गाड़ी (जो कि कस्टम समारोह में भी एम्बेड किया जाता है) कि प्रोमो आइटम को हटाने के लिए भी है।

add_action('woocommerce_before_calculate_totals', 'adding_promotional_product', 10, 1); 
function adding_promotional_product($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    $promo_id = 99; // <=== <=== <=== Set HERE the ID of your promotional product 
    $targeted_cart_subtotal = 100; // <=== Set HERE the target cart subtotal 
    $has_promo = false; 
    $subtotal = 0; 

    if (!$cart_object->is_empty()){ 

     // Iterating through each item in cart 
     foreach ($cart_object->get_cart() as $item_key => $item_values){ 

      // If Promo product is in cart 
      if($item_values['data']->id == $promo_id) { 
       $has_promo = true; 
       $promo_key= $item_key; 
      } else { 
       // Adding subtotal item to global subtotal 
       $subtotal += $item_values['line_subtotal']; 
      } 
     } 
     // If Promo product is NOT in cart and target subtotal reached, we add it. 
     if(!$has_promo && $subtotal >= $targeted_cart_subtotal) { 
      $cart_object->add_to_cart($promo_id); 
      echo 'add'; 
     // If Promo product is in cart and target subtotal is not reached, we remove it. 
     } elseif($has_promo && $subtotal < $targeted_cart_subtotal) { 
      $cart_object->remove_cart_item($promo_key); 
     } 
    } 
} 

यह कोड आपके सक्रिय बच्चा विषय (या विषय) की function.php फ़ाइल पर या किसी भी प्लगइन फ़ाइल में चला जाता है:

यहाँ कोड है।

यह कोड इसकी जांच और काम करता है।

संबंधित धागा: WooCommerce - Auto add or auto remove a freebie product from cart

कोड पर (2017-04-19)

+0

हालांकि मुझे केवल एक समस्या है। परीक्षण के संबंध में, जब मैं गाड़ी में वस्तुओं की संख्या को अपडेट करने के लिए कार्ट में विशिष्ट आइटम पर तीरों का उपयोग करता हूं (एक निश्चित कार्ट राशि तक पहुंचने के लिए) केवल एक अतिरिक्त शुल्क कार्ट राशि में जोड़ा जाता है जब तक कि मैं पृष्ठ को रीफ्रेश नहीं करता हूं या चेकआउट जारी रखें ... ?? यह एक अजीब मुद्दा है। क्या वैसे भी मैं पृष्ठ को स्वचालित रूप से रीफ्रेश कर सकता हूं जब फ्री/प्रोमो आइटम या तो जोड़ा जाता है या हटा दिया जाता है ताकि यह सुनिश्चित किया जा सके कि ग्राहक हर समय सही राशि देख रहा है? – JStormThaKid

संबंधित मुद्दे