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

在主题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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:27:23