在主题functions.php调用WooCommerce get_cart()出现空对象调用错误
解决WooCommerce调用
WC()->cart->get_cart()出现Fatal Error的问题 这个问题我碰到过好多次啦,核心原因很简单:你调用WC()->cart的时机太早,WooCommerce的购物车对象还没完成初始化,自然就会返回null,调用它的方法就报错了。下面给你几个靠谱的解决办法:
1. 把代码放到合适的WordPress/WooCommerce钩子中
永远不要直接在functions.php的全局作用域里写购物车相关代码,一定要把逻辑放到WooCommerce初始化完成后的钩子回调里。推荐用这两个钩子:
woocommerce_init:WooCommerce核心组件初始化完成后触发,专门用于WooCommerce相关逻辑wp_loaded:WordPress和所有插件都加载完成后触发,兼容性更广
示例代码:
// 使用woocommerce_init钩子 add_action('woocommerce_init', 'my_process_cart_items'); function my_process_cart_items() { // 先判断购物车对象是否存在,避免极端情况报错 if (isset(WC()->cart)) { $items = WC()->cart->get_cart(); // 在这里处理你的购物车商品逻辑,比如遍历商品 foreach ($items as $item_key => $item) { $product = $item['data']; $quantity = $item['quantity']; // 做你需要的操作 } } }
2. 如果是在后台(wp-admin)调用购物车
默认情况下,WooCommerce不会在后台初始化购物车对象,如果你需要在后台操作购物车,得手动初始化相关组件:
add_action('admin_init', 'my_admin_cart_operation'); function my_admin_cart_operation() { // 手动初始化购物车和会话 if (!isset(WC()->cart)) { WC()->cart = new WC_Cart(); } if (!isset(WC()->session)) { WC()->session = new WC_Session_Handler(); WC()->session->init(); } $items = WC()->cart->get_cart(); // 后台购物车操作逻辑 }
⚠️ 注意:后台的购物车会话和前端用户的会话是分开的,这里拿到的购物车数据可能不是当前前端用户的,需要根据业务场景调整。
额外提示
你之前写的global $woocommerce;其实是多余的,WC()已经是全局可用的函数,直接调用WC()->cart就可以了。
内容的提问来源于stack exchange,提问作者Vilden
相关产品推荐
相关产品推荐

