我正在尝试使我的代码正常工作。现在搜索小时。 我发现类似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设置中的访客结帐。
答案 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文件中。应该可以。