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
相关产品推荐
相关产品推荐

