使 WC_Cart add_to_cart 方法为 Woocommerce 中的客人工作

xDr*_*ago 1 php wordpress session cart woocommerce

我试图让我的代码工作。现在搜索小时。我发现像类似的问题这一个。但不幸的是,似乎没有人找到解决办法。

在我的自定义插件中,我想将特定项目添加到 WC 购物车并将用户直接重定向到结帐。作为登录用户,它就像一个魅力,但对于客人来说,它在结账时显示一个空白页面(woocommerce_checkout 简码在这种情况下似乎没有返回任何内容)。所以我想出了一个检查,如果购物车是空的。显然是因为“购物车页面”显示“购物车中还没有商品”。

在代码中,我检查购物车是否仍然是空的,但它告诉我不是!

这是我的代码:

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
Run Code Online (Sandbox Code Playgroud)

代码运行没有错误。它以登录用户/管理员身份 100% 工作。只是不是作为客人,即使我允许客人在 woocommerce 设置中结帐。

Loi*_*tec 5

您需要在未登录时启动 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 ); 
}
Run Code Online (Sandbox Code Playgroud)

代码位于活动子主题(或活动主题)的 functions.php 文件中。它应该有效。