我在我的 Woocommerce 网站中经常遇到一个问题,即在我的网站上下订单后购物车没有被清除。
我想在 my_theme/functions.php 中添加一个代码以确保购物车被清除。我设法创建了此代码(如下)。
这足以得到我需要的东西吗?
add_action('woocommerce_new_order','clear_the_cart');
function clear_the_cart()
{
global $woocommerce;
$woocommerce->cart->empty_cart();
}
我是否需要添加代码来获取用户 ID,然后清除该用户的购物车?如果为每个用户而不是为所有用户清除购物车,我想我将需要获取当前用户 ID,然后在执行代码行后为该用户清除购物车。
我的问题是我应该按用户还是全局清理购物车?
我知道如何获取用户 ID:
$user_ID = get_current_user_id();
....
最佳答案
添加到 function.php 后,您的方法应该可以正常工作。
您也可以使用 WC()->cart->empty_cart();
调用它.empty_cart()
有一个 $clear_persistent_cart
参数,但默认为 true,因此您的代码没问题。
如果woocommerce_before_cart_emptied
上没有任何奇怪的东西,您可以检查您的主题和插件。钩子(Hook),在 empty_cart()
开头触发方法。empty_cart()
只会清空当前用户的购物车(传递订单的那个),并且如果此代码没有被其他服务器(例如:队列)或 PHP 进程执行:客户的 session 数据将可用,因此可以清空购物车。这不会清除每个客户购物车的内容(要恢复,empty_cart()
必须从客户请求(无论是否使用 ajax)中调用,并将清除此客户购物车。)
相反,从您的支付提供商到 Woocommerce 网关或 CRON 的 webhook 或 admin-ajax 请求不会清除任何购物车(您没有 session 数据)。如果这是您的情况,您将需要以下内容:将客户 ID 保存在 DB 中的某处,然后使用检查“如果用户 ID 在 DB 数组中,init
,然后从 DB 数组中删除”的方法 Hook 某处(如 clear_cart()
) ”。
现在,Woocommerce 应该在订单完成后默认清除购物车。这里有几件事情可以尝试和测试:
add_action( 'woocommerce_new_order', 'clear_the_cart', 50, 3 );
更改您的 add_action , 增加 $priority 最后运行 woocommerce_order_status_completed
进行测试如果符合您的要求,请钩住 wp_die()
或相关,在您的 clear_the_cart()
验证此代码在您的订单后触发的方法 请注意,某些插件(以及 Hook 上的一些自定义代码)可以防止购物车在订单完成后清空 ( see )
关于php - Woocommerce:在我的网站下订单后强制清除购物车?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68484701/