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

