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

修复WooCommerce中get_cart()调用空对象致命错误及页面编辑异常

解决WooCommerce自定义按钮文本代码在页面编辑时的致命错误

之前你用来修改“加入购物车”按钮文本的代码,现在在WordPress页面编辑时触发了严重的致命错误,错误信息显示调用get_cart()方法时对象为null。我来帮你搞定这个问题:

错误原因分析

问题出在你代码里的global $woocommerce;这一行。当你在后台编辑页面(尤其是用Gutenberg编辑器加载WooCommerce产品块的时候),WooCommerce的全局购物车对象还没有被初始化,这时候调用$woocommerce->cart->get_cart()就会触发“调用空对象的方法”的错误。

修复后的代码

直接替换成下面这段代码就能解决问题:

function woocommerce_custom_add_to_cart_text($add_to_cart_text, $product ) {
    // 先检查购物车对象是否存在(避免后台编辑等非前端场景报错)
    if ( ! WC()->cart ) {
        return $add_to_cart_text;
    }
    
    $cart_items = WC()->cart->get_cart();
    foreach ( $cart_items as $cart_item ) {
        $_product_id = $cart_item['product_id'];
        if ( $product->get_id() == $_product_id ) {
            $add_to_cart_text = 'Already in cart';
            // 找到匹配项后直接跳出循环,提升运行效率
            break;
        }
    }
    return $add_to_cart_text;
}
add_filter( 'woocommerce_product_add_to_cart_text', 'woocommerce_custom_add_to_cart_text', 10, 2 );

关键修改点说明

  • 替换购物车对象获取方式:用WC()->cart替代全局$woocommerce对象,这是WooCommerce官方推荐的做法,它会自动处理对象的初始化状态,避免空对象调用。
  • 添加场景判断:增加if ( ! WC()->cart )的检查,当购物车对象不存在时(比如后台编辑、产品预览等场景),直接返回原始按钮文本,跳过后续可能报错的逻辑。
  • 优化循环逻辑:找到匹配的产品ID后立即break循环,不用遍历整个购物车列表,提升代码运行效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:52:42