【问题标题】:Make WC_Cart add_to_cart method working for guests in Woocommerce使 WC_Cart add_to_cart 方法适用于 Woocommerce 中的客人
【发布时间】:2019-04-24 13:33:18
【问题描述】:

我正在尝试让我的代码正常工作。现在搜索几个小时。 我发现了类似的问题,例如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

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

【问题讨论】:

  • Heyja,代码可能没有问题。它作为登录用户工作正常。它只是 WooCommerce 的 add_to_cart 功能,在没有登录用户的情况下将商品添加到购物车后似乎会产生问题。
  • 哇,它有效!非常感谢你,你是我的男人!你能解释一下发生了什么吗?
  • 哦,我想当我添加您的代码时,我的管理区域不再工作了。 HTTP 500 错误。

标签: php wordpress session woocommerce cart


【解决方案1】:

您需要在未登录时启动 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 文件中。它应该可以工作。

【讨论】:

  • 是的!非常感谢。您的回复可能会帮助一些人,因为我在网上看到了很多类似的问题。它还修复了 http 500 错误。真棒
  • @xDrago 我已在您的问题中将linked thread 标记为重复...这将有助于人们轻松找到此线程。
  • 一部分我想质疑为什么 WC 最初是这样的,但大部分我只是松了一口气。 :) 谢谢。
猜你喜欢
  • 2019-01-13
  • 2014-09-30
  • 2018-04-04
  • 1970-01-01
  • 2019-02-02
  • 2022-01-05
  • 1970-01-01
  • 2017-07-13
  • 2015-05-20
相关资源
最近更新 更多