2016-10-26 50 views
1

我正在爲一個小型的放棄購物車恢復插件工作,我需要從woocommerce_sessions表中恢復購物車。WooCommerce從會話數據中恢復購物車

以下是購物車中1種可變產品的未編碼購物車數據。

array (size=1) 
    'cart' => 
    array (size=9) 
     'product_id' => int 22 
     'variation_id' => int 24 
     'variation' => 
     array (size=1) 
      'attribute_pa_color' => string 'green' (length=5) 
     'quantity' => int 1 
     'line_total' => float 20 
     'line_tax' => int 0 
     'line_subtotal' => int 20 
     'line_subtotal_tax' => int 0 
     'line_tax_data' => 
     array (size=2) 
      'total' => 
      array (size=0) 
       empty 
      'subtotal' => 
      array (size=0) 
       empty 

我試圖用這些數據恢復整個購物車。我知道這是可以遍歷這個數組,並通過

WC_Cart::add_to_cart($product_id, $quantity, $variation_id, $variation); 

項目添加到購物車,但有沒有更優雅的方式做它作爲數據存儲在woocommerce_sessions表,完全兼容WooCommerce?

回答

1

我沒有找到這方面的任何其他解決方案,所以只是清除了車,然後再通過與車數據的循環了,並添加項目到購物車程序。代碼如下所示。

if ($cart_data) { 
    WC()->cart->empty_cart(); 

    foreach ($cart_data as $product) { 

     // Validate Product data 
     $product_id = isset($product['product_id']) ? (int) $product['product_id'] : 0; 
     $quantity  = isset($product['quantity'])  ? (int) $product['quantity']  : 1; 
     $variation_id = isset($product['variation_id']) ? (int) $product['variation_id'] : 0; 
     $variation = isset($product['variation'])  ? $product['variation']   : array(); 

     WC()->cart->add_to_cart($product_id, $quantity, $variation_id, $variation); 
    } 
    WC()->cart->calculate_totals(); 
}