在我的网站上,我使用WooCommerce的方式有点不同。我在我的网站上销售服务,服务页面有定价表。当人们单击定价表的相应按钮时,他们会直接转到结帐。我已在Woocmer设置中取消选中以下选项:
成功添加后重定向到购物车页面,在存档上启用AJAX添加到购物车按钮,我的所有产品都被设置为带有虚拟物品的可变产品,并且只能在单个订单上购买一个数量我还添加了以下代码片段,以确保用户直接转到结账页面,而不是中间的购物车页面。
add_filter(\'add_to_cart_redirect\', function() {
// Remove the default `Added to cart` message
wc_clear_notices();
return wc_get_checkout_url();
});
这种方法工作得很好,可以按预期将用户带到签出页面,但会产生两个问题:
情况1
用户访问服务页面,单击相应的定价表,转到结帐页面。现在,用户单击浏览器上一步按钮,重新考虑选择哪个计划。然后认为他选择的计划一直都是正确的。
然后,他再次单击定价表按钮,但这次看到:
You cannot add another "Product X" to your cart.
情景2
访客首先选择一个返回的计划,然后在重新思考后选择另一个计划。在这种情况下,在结账页面上,用户会对两种产品都收取费用,一种是他第一次错误选择的产品,另一种是他实际选择的产品。现在由于没有购物车页面,用户很难去更新购物车。
我正在寻找的是,我只是想一起禁用购物车功能,这样网站就不会记得用户在购物车中添加了什么。因此,如果用户选择一个产品,然后转到结账页面,然后返回并选择另一个产品,则不会发生此问题,因为购物车不会记住任何内容,并且购物车功能被禁用。
最合适的回答,由SO网友:iSaumya 整理而成
我不确定这样做是否正确,但我最终在这里找到了答案:https://stackoverflow.com/a/49382476/2308992
并执行了以下操作:
add_action( \'woocommerce_add_to_cart_validation\', function( $passed, $product_id, $quantity ) {
if( ! WC()->cart->is_empty() ) {
wc_empty_cart();
}
return $passed;
}, 20, 3);
在WooCommerce尝试在购物车中添加任何内容之前,它基本上会清除购物车,因此购物车基本上不会记住任何内容。实现这一点解决了我如上所述面临的问题。
但是,如果你知道更好的方法,请分享。我很想知道。