2016-08-30 5 views
9

मैं वर्तमान में WooCommerce के साथ एक वेब शॉप बना रहा हूं और मेरे पास यह कार्ट बनाया गया है कि आप किसी भी समय किसी भी पृष्ठ पर पहुंच सकते हैं, आप कार्ट के भीतर किसी उत्पाद की मात्रा को अपडेट कर सकते हैं। समस्या तब होती है जब भी मैं ऐसा करता हूं तो कुछ मूल्य गड़बड़ हो जाते हैं। उदाहरण के लिए जब मैं यह रिटर्न 0.WooCommerce AJAX अद्यतन मानों को गड़बड़ाना

लेकिन जब मैं चेकआउट पृष्ठ पर जाने के यह सब सही गाड़ी आंकड़ों से पता चलता WC()->cart->total प्राप्त करने की कोशिश, तो यह मुझे लगता है कि मैं कुछ action मैं कुछ समायोजन करने के बाद चलाने के लिए है याद कर रहा हूँ बनाता है गाड़ी में मैं set_quantity() फ़ंक्शंस को देख रहा हूं और यह $this->calculate_totals(); के साथ स्वचालित रूप से रीफ्रेश करता है (इसे मैन्युअल रूप से भी आजमाया गया है)।

अजाक्स समारोह: इस संशोधित ajax समारोह

public function set_quantity($direction = false, $product_id) { 
    $response = array(); 
    $justOne = false; 

    if($_GET['data']['direction'] && $_GET['data']['product_id']) { 
     $direction = $_GET['data']['direction']; 
     $product_id = $_GET['data']['product_id']; 
     $justOne = true; 
    } 

    foreach (WC()->cart->get_cart() as $cart_item_key => $values) { 
     $_product = $values['data']; 
     if ($product_id == $_product->id) { 

      if($justOne && $direction == 'minus') { 
       WC()->cart->set_quantity($cart_item_key, $values['quantity'] - 1, true); 
       $response['success']['quantity'] = $values['quantity'] - 1; 
      } else if($justOne && $direction == 'plus') { 
       WC()->cart->set_quantity($cart_item_key, $values['quantity'] + 1, true); 
       $response['success']['quantity'] = $values['quantity'] + 1; 
      } else { 
       WC()->cart->set_quantity($cart_item_key, $values['quantity'] + $direction, true); 
      } 

      $response['success']['line_total'] = '€ '.number_format((float)$response['success']['quantity'] * $_product->price, 2, '.', ''); 
      $response['success']['cart_count'] = WC()->cart->get_cart_contents_count(); 
      $response['success']['total'] = number_format((float)WC()->cart->total, 2, '.', ''); 
      die(json_encode($response)); 
     } 
    } 
    return false; 
} 
+0

आप इस प्रक्रिया $ का प्रयास किया woocommerce-> cart-> get_total(); डब्ल्यूसी() -> कार्ट-> get_total(); ? – Gopalakrishnan

+0

आप इस फ़ंक्शन को कब और कैसे कॉल कर रहे हैं? – Reigel

+0

@ गोपालकृष्णन मुझे लगता है कि मैंने कोशिश की है कि मुझे याद नहीं किया जा सकता है जब मेरे पास समय होगा, आपके उत्तर के लिए धन्यवाद – LVDM

उत्तर

1

का प्रयोग करें। मैंने इसका परीक्षण किया है। यह काम करेगा।

संशोधित अजाक्स फंक्शन:

public function set_quantity($direction = false, $product_id) { 
    $response = array(); 
    $justOne = false; 

    if($_GET['data']['direction'] && $_GET['data']['product_id']) { 
     $direction = $_GET['data']['direction']; 
     $product_id = $_GET['data']['product_id']; 
     $justOne = true; 
    } 

    foreach (WC()->cart->get_cart() as $cart_item_key => $values) { 
     $_product = $values['data']; 
     if ($product_id == $_product->id) { 

      if($justOne && $direction == 'minus') { 
       WC()->cart->set_quantity($cart_item_key, $values['quantity'] - 1, true); 
       $response['success']['quantity'] = $values['quantity'] - 1; 
      } else if($justOne && $direction == 'plus') { 
       WC()->cart->set_quantity($cart_item_key, $values['quantity'] + 1, true); 
       $response['success']['quantity'] = $values['quantity'] + 1; 
      } else { 
       WC()->cart->set_quantity($cart_item_key, $values['quantity'] + $direction, true); 
      } 

      if (! defined('WOOCOMMERCE_CART')) { 
       define('WOOCOMMERCE_CART', true); 
      } 
      WC()->cart->calculate_totals(); 

      $response['success']['line_total'] = '€ '.number_format((float)$response['success']['quantity'] * $_product->price, 2, '.', ''); 
      $response['success']['cart_count'] = WC()->cart->get_cart_contents_count(); 
      $response['success']['total'] = number_format((float)WC()->cart->total, 2, '.', ''); 
      die(json_encode($response)); 
     } 
    } 
    return false; 
} 
+0

आपके उत्तर के लिए धन्यवाद जैसे ही मुझे समय मिल जाएगा! – LVDM

+0

अंततः इसका परीक्षण करने के लिए समय मिला, और यह मेरे लिए काम नहीं करता है। 'डब्ल्यूसी() -> कार्ट-> get_total()' और 'डब्ल्यूसी() -> कार्ट-> कुल 'कुछ अजीब कारणों के लिए' 0.00 'दोनों वापसी। – LVDM

+0

असल में यह काम करता है, मेरी तरफ से गलती हुई :-), बहुत दोस्त धन्यवाद। – LVDM

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