You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce邮件模板批量操作报错:调用get_cart_contents_count()失败

WooCommerce批量操作触发WC()->cart空指针错误的原因与修复方案

为啥批量操作会报错?

咱们先理清楚WooCommerce的购物车对象逻辑:WC()->cart是和前端用户会话绑定的——只有用户在前台逛网站、加购商品的时候,WooCommerce才会初始化这个购物车对象。而后台的批量操作(比如批量改订单状态、批量发订单邮件)是在后台环境跑的,这些操作没有对应的前台用户会话,WooCommerce根本不会自动加载购物车对象,所以此时WC()->cart就是null,你调用它的get_cart_contents_count()方法自然就会抛出致命错误。

另外多说一句:你在email-order-details.php里用购物车方法其实有点逻辑偏差——订单邮件是给特定已完成订单发的,购物车是当前用户的临时购物数据,两者完全不是一回事。比如用户下单后清空了购物车,或者管理员在后台批量发历史订单邮件,这时候购物车数据和订单半毛钱关系都没有。

彻底修复的方法

方案1:改用订单对象取商品总数(强烈推荐)

既然是在订单邮件模板里,直接从当前订单对象里拿商品总数才是正确的打开方式,完全不用依赖购物车:

// email-order-details.php里默认已经有$order对象了,直接用就行
echo $order->get_item_count();

不管是用户下单后前台触发邮件,还是后台批量操作触发,这个方法都能正常工作——因为订单对象是邮件模板的核心依赖,一定会被初始化。

方案2:完善空值判断(兼容原有逻辑)

如果你暂时不想调整核心逻辑,也可以把你的临时方案写得更简洁严谨:

// 先判断购物车对象是否存在,再调用方法,不存在就显示0
echo isset(WC()->cart) ? WC()->cart->get_cart_contents_count() : 0;

不过还是建议用方案1,毕竟从订单取数才符合邮件模板的业务逻辑,能从根源上避免这类问题。

内容的提问来源于stack exchange,提问作者jpussacq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:35:39