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

时间:2018-11-21 22:21:08

标签: php wordpress session woocommerce cart

我正在尝试使我的代码正常工作。现在搜索小时。 我发现类似this one之类的问题。但不幸的是,似乎没有人找到解决方案。

在我的自定义插件中,我想向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

代码运行无错误。并且它以登录用户/ admin的身份工作100%。只是不以访客身份,甚至我都允许woocommerce设置中的访客结帐。

1 个答案:

答案 0 :(得分:2)

您需要在未登录时启动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 ( ! WC()->session->has_session() ) 
       WC()->session->set_customer_session_cookie( true ); 
}

代码进入您的活动子主题(或活动主题)的function.php文件中。应该可以。