WordPress WooCommerce添加到购物车仅添加一种产品

WordPress WooCommerce添加到购物车仅添加一种产品,wordpress,woocommerce,Wordpress,Woocommerce,我对WooCommerce是个新手,我搞不懂这个。 我正在创建一个自定义API(基于用户需求),并允许用户使用如下post请求登录Laravel: public function login (Request $req) { global $woocommerce; $v = \Validator::make($req->all(), [ 'username' => 'required|max:255', 'password' =>

我对WooCommerce是个新手,我搞不懂这个。 我正在创建一个自定义API(基于用户需求),并允许用户使用如下post请求登录Laravel:

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版

您已经将数量硬编码为1。以下是函数:

 WC()->cart->add_to_cart($productId,1,0,null,null);
在这个函数中,第二个参数是数量。所以,如果你想的话,增加数量

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

您已将数量硬编码为1。以下是函数:

 WC()->cart->add_to_cart($productId,1,0,null,null);
在这个函数中,第二个参数是数量。所以,如果你想的话,增加数量

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

据我所知,您使用的代码是两个不同的会话

WC()->cart->set_session()&
WC()->session->set\u customer\u session\u cookie(true)


也就是说,一旦用户登录,第二个是当它添加产品到购物车。您是否检查了在未登录的情况下工作是否正常?其他可能的问题可能是主题集成,或者您打开调试模式的任何一种方式都会帮助您解决问题。

据我所知,您使用的代码是两个不同的会话

WC()->cart->set_session()&
WC()->session->set\u customer\u session\u cookie(true)


也就是说,一旦用户登录,第二个是当它添加产品到购物车。您是否检查了在未登录的情况下工作是否正常?其他可能的问题可能是主题集成,或者您打开调试模式的任何一种方式都会帮助您解决问题。

问题不在于数量,而在于您添加其他产品时,它只会替换现有产品。我知道默认方法是
WC()->cart->add\u to\u cart($productId)但仍然无效。会话出现问题。问题不在于数量,问题在于当您添加另一个产品时,它将只替换现有产品。我知道默认方法是
WC()->cart->add\u to\u cart($productId)但仍然无效。会话出现问题。
仅当产品不在购物车中时添加该产品
,为什么这样做?如果您不知道,如果商品已经在购物车中,
添加到购物车
将更新数量。。。但是,由于您没有调用
add_to_cart
如果产品在购物车中,数量将不会更新..我的问题不是数量,假设有两个产品A和B,如果我添加A,当我添加B时,这将覆盖A
仅当产品不在购物车中时添加产品,为什么这样做?如果您不知道,如果商品已经在购物车中,
添加到购物车
将更新数量。。。但是,由于您没有调用
add_to_cart
,如果产品在购物车中,数量将不会更新..我的问题不是数量,假设有两个产品A和B,如果我添加A,当我添加B时,这将覆盖AThanks以供回复,我已删除第二个会话,并在未登录的情况下添加产品,结果仍然是一样的。使用这个
WC()->cart->set_session()
在函数add(productid)中,看看它是否有效?谢谢你的回复,我已经删除了第二个会话,并且在没有登录的情况下添加了产品,结果仍然是一样的。使用这个
WC()->cart->set_session()并查看它是否有效?