2016-03-07 269 views
1

我是WooCommerce的新手,我無法弄清楚這一點。 我創建一個自定義的API(可根據用戶要求),我使用POST請求這樣讓用戶登錄在Laravel:WordPress WooCommerce添加到購物車只能添加一個產品

public function login (Request $req) 
{ 
    global $woocommerce; 
    $v = \Validator::make($req->all(), [ 
     'username' => 'required|max:255', 
     'password' => 'required|max:255', 
    ]); 
    if ($v->passes()) 
    { 
     $user = wp_signon(['user_login'=>$req->input("username"),"user_password"=>$req->input("password")],true); 
     if (is_wp_error($user) || !is_user_logged_in()) 
     { 
      return response(['success' => false, 'message' => "Invalid Username or Password."], 401); 
     } 
     $key = md5($user->ID . $user->user_login. (time() + 7200) . $user->email); 
     $cookie = wp_generate_auth_cookie($user->ID, (time() + 7200), "auth", $key); 
     $store = [ 
      'user_login'  => $user->data->user_login, 
      'user_id'   => $user->data->ID, 
      'user_nicename' => $user->data->user_nicename, 
      'user_email'  => $user->data->user_email, 
      'user_url'  => $user->data->user_url, 
      'user_registered' => $user->data->user_registered, 
      'display_name' => $user->data->display_name, 
     ]; 
     Session::push($cookie, $store); 
     WC()->cart->set_session(); 
     return response(['auth_token' => $cookie, 'success' => true, 'cart'=>WC()->cart->get_cart_for_session(), 'timeout' => 7200], 200); 
    } 
    return response(['success' => false, 'message' => "Required field(s) missing."], 401); 
} 

現在,每當我將產品添加到購物車,只替換之前的值,並且只有一個項目被添加到購物車。當我登錄到我的WordPress網站並訪問購物車時,它顯示錯誤「未定義的索引」,而購物車是空的。這裏是添加項目到購物車的代碼:

public function add($productId) 
{ 
    //WC()->session->set_customer_session_cookie(true); 
    $cart_id = WC()->cart->generate_cart_id($productId); 
    $prod_in_cart = WC()->cart->find_product_in_cart($cart_id); 
    // Add the product only if it's not in the cart already 
    if(! $prod_in_cart) 
    { 
     WC()->cart->add_to_cart($productId,1,0,null,null); 
    } 
    return response([ 
     'user'=>WC()->session->get_customer_id(), 
     'cart'=>WC()->cart, 
    ]); 
} 

我知道我做錯了什麼,但不知道是什麼。任何幫助將不勝感激。


編輯

如果它有助於我使用WooCommerce版本2.3

+0

'僅當產品不在購物車中時才添加產品,爲什麼要這樣做?如果您不知道,如果商品已在購物車中,則add_to_cart將會更新數量......但是如果您沒有調用add_to_cart,則商品數量不會更新。 – Reigel

+0

我的問題不在於數量,可以說有2個產品A和B,如果我加了A,當我加B時,這個覆蓋A – Tahir

回答

0

你已硬編碼的數量爲1。下面是函數:

WC()->cart->add_to_cart($productId,1,0,null,null); 

在這功能,第二個參數是數量。所以如果你想要提高數量。

$qty = 2; 
WC()->cart->add_to_cart($productId,$qty,0,null,null); 
+0

問題不在於數量,問題是當你添加另一個產品時,那麼它將會取代現有的產品。我知道默認的方法是WC()->cart->add_to_cart($productId);,但仍然無濟於事。會話有問題。 – Tahir

0

至於我看過你的代碼,你正在使用兩個不同的會話

WC()->cart->set_session(); & WC()->session->set_customer_session_cookie(true)

即一旦用戶登錄,第二個是同時增加了產品購物車。你沒有檢查是否沒有登錄的情況下工作是否完美?其他可能出現的問題是主題集成,或者您需要打開調試模式的方式ON可以幫助您解決問題。

+0

感謝您的回覆,我刪除了第二個會話,並且添加了沒有登錄的產品,結果仍然相同。 – Tahir

+0

在函數add(productid)中使用'WC() - > cart-> set_session();'看看它是否有效? –

相關問題