Wordpress Rest API根据woocommerce中的用户id在购物车中存储产品

Wordpress Rest API根据woocommerce中的用户id在购物车中存储产品,wordpress,woocommerce,cart,woocommerce-rest-api,Wordpress,Woocommerce,Cart,Woocommerce Rest Api,我发现只有下面提到的代码被少数人接受,但选项表中没有存储具有以下键“\u wc\u session\u”的会话。$user\u id function add_products_programmatically($user_id) { // Get the current session data and saved cart $wc_session_data = get_option('_wc_session_'.$user_id); // Get the persistent cart

我发现只有下面提到的代码被少数人接受,但选项表中没有存储具有以下键“\u wc\u session\u”的会话。$user\u id

function add_products_programmatically($user_id) {

// Get the current session data and saved cart
$wc_session_data = get_option('_wc_session_'.$user_id);

// Get the persistent cart
$full_user_meta = get_user_meta($user_id,'_woocommerce_persistent_cart', true);

// Create a new WC_Cart instance and add products programmatically
$cart = get_new_cart_with_products();

// If there is a current session cart, overwrite it with the new cart
if($wc_session_data) {
    $wc_session_data['cart'] = serialize($cart->cart_contents);
    update_option('_wc_session_'.$user_id, $wc_session_data);
}

// Overwrite the persistent cart with the new cart data
$full_user_meta['cart'] = $cart->cart_contents;
update_user_meta($user_id, '_woocommerce_persistent_cart', $full_user_meta);
}

在对woo commerce使用持久购物车的方式进行了大量研究之后,我创建了一个有效的解决方案

function woocomm_add_to_cart($param) {

global $wpdb;
$user_id = $param['user_id'];
$objProduct = new WC_Session_Handler();

$wc_session_data = $objProduct->get_session($user_id);

// Get the persistent cart may be _woocommerce_persistent_cart can be in your case check in user_meta table
$full_user_meta = get_user_meta($user_id,'_woocommerce_persistent_cart_1',true);

// create new Cart Object
$cartObj = new WC_Cart();

// Add old cart data to newly created cart object
if($full_user_meta['cart']) {
    foreach($full_user_meta['cart'] as $sinle_user_meta) {
        $cartObj->add_to_cart( $sinle_user_meta['product_id'], $sinle_user_meta['quantity']  );
    }
}

// Add product and quantities coming in request to the new cart object
if($param['products']){
    foreach($param['products'] as $prod) {
        $cartObj->add_to_cart( $prod['product_id'], $prod['quantity']  );
    }
}

$updatedCart = [];
foreach($cartObj->cart_contents as $key => $val) {
    unset($val['data']);
    $updatedCart[$key] = $val;
}

// If there is a current session cart, overwrite it with the new cart
if($wc_session_data) {
    $wc_session_data['cart'] = serialize($updatedCart);
    $serializedObj = maybe_serialize($wc_session_data);


    $table_name = 'wp_woocommerce_sessions';

    // Update the wp_session table with updated cart data
    $sql ="UPDATE $table_name SET 'session_value'= '".$serializedObj."', WHERE  'session_key' = '".$user_id."'";

    // Execute the query
    $rez = $wpdb->query($sql);
}

// Overwrite the persistent cart with the new cart data
$full_user_meta['cart'] = $updatedCart;
update_user_meta($user_id, '_woocommerce_persistent_cart_1', $full_user_meta);

$response = [
    'status' => true,
    'message' => 'Products successfully added to cart'
];

return rest_ensure_response($response);


}
以下是Rest API的请求json数据:

{"user_id": 15, "products" : [{"product_id":"81","quantity":"0.5"},{"product_id":"1817","quantity":"0.5"}]}

我建议你检查一下这个插件@网站已启用PraveenSP持久购物车。我希望使用API为移动应用程序提供相同的“添加到购物车”功能,以便从移动应用程序添加的产品将与web应用程序购物车同步。因此,您希望它同步吗?我会更新,如果我发现任何类似的。顺便说一句,你在使用cocart插件吗?@PraveenSP否,这是默认的woo commerce功能。你能提供一些关于将此代码放在何处的说明吗?请求json的端点是什么?先谢谢你