2016-08-30 32 views
9

Obecnie robię sklep internetowy z WooCommerce i mam ten koszyk wykonany, że można uzyskać dostęp na dowolnej stronie w dowolnym momencie, możesz zaktualizować ilość produktu w samym koszyku. Problem pojawia się zawsze, gdy to robię, niektóre wartości są pomieszane. Na przykład, gdy próbuję uzyskać WC()->cart->total zwraca 0.Aktualizacja ajax WooCommerce psuje wartości

Ale kiedy idę do strony kasy pokazuje wszystkie prawidłowe dane koszyka, więc to sprawia, że ​​myślę, że brakuje mi jakiegoś action muszę biec po dostosowaniu czegoś w opałach. Przeglądam funkcje set_quantity() i automatycznie odświeżam łącznie z $this->calculate_totals(); (wypróbowałem również ręcznie).

Ajax Funkcja:

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

nie spróbować tej procedury $ woocommerce-> koszyk-> get_total(); WC() -> cart-> get_total(); ? – Gopalakrishnan

+0

kiedy i jak wywołujesz tę funkcję, którą podałeś? – Reigel

+0

@Gopalakrishnan Wydaje mi się, że próbowałem tego, który równie dobrze nie pamiętam, przetestuje, gdy będę miał czas, dziękuję za odpowiedź – LVDM

Odpowiedz

1

Funkcja ta zmodyfikowana funkcja ajax. Testowałem to. To zadziała.

Modified Ajax Funkcja:

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

Dzięki za odpowiedź odpowiesz, jak tylko znajdę czas! – LVDM

+0

Wreszcie mam czas, aby przetestować, i to nie działa dla mnie. 'WC() -> cart-> get_total()' & 'WC() -> cart-> total' oba zwracają '0.00' z jakiegoś dziwnego powodu. – LVDM

+0

Właściwie to działa, popełniłem błąd po mojej stronie :-), dziękuję bardzo kolego. – LVDM