WooCommerce Add_to_Cart非注册访客不工作

时间:2018-11-28 作者:TungstenX

我创建了一个插件,它需要即时创建WooCommerce产品(简单产品)并添加到访问者的购物车中。所有这些都发生在前端/公共端,即访问者在页面上填写表单并提交。我使用了以下资源:this answer 以开始。成功创建产品后,我将使用:

$product_id = $this->create_product($product);
// Error checking, etc
$result = WC()->cart->add_to_cart($product_id);
将其添加到购物车。这在我登录时效果很好(在管理端-前端/公共端可能会检测到我已登录)。

但当我没有登录时:只有产品创建似乎可以工作,因为我可以在db中看到产品,但访问者的购物车是空的。以及$result 看起来不错。

$result = 44f683a84163b3523afe57c2e008bc8c
我改变了WooCommerce的设置,但没有什么不同。enter image description here

Update

为了清晰起见:我不想强迫访问者在将产品添加到购物车之前进行注册。

副作用:当我未登录时,我的购物车中没有任何产品,但当我登录并添加另一个产品时,我会在购物车中同时获得这两个产品。

如何确保这样创建的产品添加到访客购物车

1 个回复
最合适的回答,由SO网友:Greg Winiarski 整理而成

我在我的开发网站上做了两个测试

add_action( "wp_loaded", function() {
    var_dump(WC()->cart->add_to_cart(1353));
});
以及

add_action( "wp_footer", function() {
    var_dump(WC()->cart->add_to_cart(1353));
});
两个var\\u都转储一个哈希,但只有第一个var\\u实际将产品添加到购物车,第二个var\\u打印哈希,但不添加任何内容。

在第二次测试中,一些内容已经发送到浏览器,WooCommerce无法设置购物车cookie。

如果确保在将内容发送到浏览器之前运行add\\u to\\u cart()方法(例如,在wp\\u-loaded操作中运行),那么代码应该可以正常工作。

结束

相关推荐