使 WC_Cart add_to_cart 方法适用于 Woocommerce 中的访客
Make WC_Cart add_to_cart method working for guests in Woocommerce
我正在尝试让我的代码正常工作。现在正在搜索几个小时。
我发现类似 this one 的问题。但不幸的是,似乎没有人找到解决方案。
在我的自定义插件中,我想将特定商品添加到 WC 购物车并将用户直接重定向到结帐处。作为登录用户,它就像一个魅力,但对于客人来说,它在结账时显示一个空白页面(woocommerce_checkout 简码在这种情况下似乎 return 什么都没有)。
所以我想到了检查购物车是否空了。显然是因为 "cart-page" 显示 "There are no items in the cart yet".
在代码中,我检查购物车是否仍然是空的,但它告诉我不是!
这是我的代码:
if(!$wooID = $wpdb->get_var("SELECT wooID FROM ".$wpdb->prefix."ceb_events WHERE id = $event")) die("ERROR GETTING WOOID");
WC()->cart->empty_cart();
if(!WC()->cart->add_to_cart( $wooID, 1 )) die("CART GOT NOT UPDATED. THERE IS AN ERROR 1.");
if(WC()->cart->get_cart_contents_count() == 0) die("CART GOT NOT UPDATED. THERE IS AN ERROR 2.");
//Here follows the redirect to checkout page
代码运行没有错误。它作为登录用户/管理员 100% 工作。只是不是作为访客,即使我在 woocommerce 设置中允许访客结帐。
您需要在未登录时启动 Woocommerce 用户会话。因此您将使用以下内容:
add_action( 'woocommerce_init', 'force_non_logged_user_wc_session' );
function force_non_logged_user_wc_session(){
if( is_user_logged_in() || is_admin() )
return;
if ( isset(WC()->session) && ! WC()->session->has_session() )
WC()->session->set_customer_session_cookie( true );
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该有效。
我正在尝试让我的代码正常工作。现在正在搜索几个小时。 我发现类似 this one 的问题。但不幸的是,似乎没有人找到解决方案。
在我的自定义插件中,我想将特定商品添加到 WC 购物车并将用户直接重定向到结帐处。作为登录用户,它就像一个魅力,但对于客人来说,它在结账时显示一个空白页面(woocommerce_checkout 简码在这种情况下似乎 return 什么都没有)。 所以我想到了检查购物车是否空了。显然是因为 "cart-page" 显示 "There are no items in the cart yet".
在代码中,我检查购物车是否仍然是空的,但它告诉我不是!
这是我的代码:
if(!$wooID = $wpdb->get_var("SELECT wooID FROM ".$wpdb->prefix."ceb_events WHERE id = $event")) die("ERROR GETTING WOOID");
WC()->cart->empty_cart();
if(!WC()->cart->add_to_cart( $wooID, 1 )) die("CART GOT NOT UPDATED. THERE IS AN ERROR 1.");
if(WC()->cart->get_cart_contents_count() == 0) die("CART GOT NOT UPDATED. THERE IS AN ERROR 2.");
//Here follows the redirect to checkout page
代码运行没有错误。它作为登录用户/管理员 100% 工作。只是不是作为访客,即使我在 woocommerce 设置中允许访客结帐。
您需要在未登录时启动 Woocommerce 用户会话。因此您将使用以下内容:
add_action( 'woocommerce_init', 'force_non_logged_user_wc_session' );
function force_non_logged_user_wc_session(){
if( is_user_logged_in() || is_admin() )
return;
if ( isset(WC()->session) && ! WC()->session->has_session() )
WC()->session->set_customer_session_cookie( true );
}
代码进入您的活动子主题(或活动主题)的 functions.php 文件。它应该有效。