2016-08-30 3 views
9

В настоящее время я делаю интернет-магазин с WooCommerce, и у меня есть корзина, в которую вы можете получить доступ на любой странице в любое время, вы можете обновить количество продукта в самой корзине. Проблема возникает, когда я делаю это, некоторые значения перепутаны. Например, когда я пытаюсь получить WC()->cart->total, он возвращает 0.WooCommerce ajax update messing up values ​​

Но когда я иду на страницу проверки, он показывает все правильные данные в корзине, так что это заставляет меня думать, что мне не хватает 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(); WC() -> cart-> get_total(); ? – Gopalakrishnan

+0

, когда и как вы называете эту функцию, которую вы предоставили? – Reigel

+0

@Gopalakrishnan Я думаю, что я пробовал, что один тоже не помню, будет проверять, когда у меня будет время, спасибо за ваш ответ – LVDM

ответ

1

Используйте эту Модифицированная функция AJAX. Я проверил это. Это сработает.

Модифицированный 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); 
      } 

      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

Наконец-то настало время проверить его, и это не сработает для меня. 'WC() -> cart-> get_total()' & 'WC() -> cart-> total' оба возвращают '0.00' по какой-то странной причине. – LVDM

+0

На самом деле он действительно работает, совершил ошибку на моей стороне :-), спасибо большое. – LVDM