我正在构建一项订阅服务,每周会自动将一些商品添加到用户购物车中,而不需要登录。问题是WooCommerce似乎在多个位置都带有购物车数据,而且我和#39;我不确定哪个可以作为"主人"优先购物车。保存在用户元中的持久性购物车似乎服从会话购物车数据。但是,我无法弄清楚如何在没有通过浏览器以用户身份登录的情况下获取/设置会话购物车数据。
我应该尝试以某种方式欺骗用户登录以获取对会话变量的访问权限吗?或者有没有办法通过WooCommerce API直接执行此操作?
答案 0 :(得分:0)
所以我发现会话数据在选项元数据中存储为一个站点选项,如果我将持久购物车和会话设置为同一个东西,那么它将始终加载正确的信息。这是一个片段,展示如何使用序列化执行此操作:
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);
}
get_new_cart_with_products()函数只是创建一个新的WC_Cart()对象并添加项目,然后返回购物车对象。