WooCommerce从会话数据中恢复购物车

时间:2016-10-26 07:09:35

标签: php wordpress woocommerce

我正在为一个小的Abandon Cart Recovery Plugin工作,我需要从woocommerce_sessions表中恢复购物车。

以下是购物车中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 个答案:

答案 0 :(得分: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();
}