Woocommerce短代码PHP报错:调用get_items()触发E_ERROR错误
解决WordPress短代码调用
get_items()报错问题 错误提示Uncaught Error: Call to a member function get_items() on bool的核心原因是:你调用$order->get_items()时,$order是布尔值false。具体触发场景和修复方案如下:
问题根源
- 短代码可能在非订单成功页面被加载,此时
$wp->query_vars['order-received']不存在,$order_id被转为0,wc_get_order(0)返回false。 - 代码中未全局声明
$wp变量,导致无法正确读取query_vars里的订单ID。
修复后的代码
function getOrderItemList() { // 全局声明$wp变量,确保能访问页面的query参数 global $wp; // 检查是否处于订单成功页面 if ( ! isset( $wp->query_vars['order-received'] ) ) { return ''; // 非订单页面返回空,避免报错 } $order_id = absint( $wp->query_vars['order-received'] ); $order = wc_get_order( $order_id ); // 验证订单是否有效 if ( ! $order ) { return '无效订单'; // 可根据需求改为返回空或其他提示 } // 你原本的$order_line_items未使用,可直接删除 $total = $order->get_total(); return wc_price( $total ); // 用WooCommerce内置函数格式化金额,适配货币显示 } add_shortcode( 'order-line-item', 'getOrderItemList' );
关键修复点
- 全局声明
$wp:确保能正确读取订单成功页面的专属query参数。 - 增加页面判断:仅在订单成功页面执行订单相关逻辑,其他页面直接返回空,避免报错。
- 订单有效性校验:确认
wc_get_order成功获取到订单对象后,再调用其方法。 - 金额格式化:用
wc_price替代直接返回数字,让金额显示符合WooCommerce的货币格式规范。
内容的提问来源于stack exchange,提问作者beatlesfan1234
相关产品推荐
相关产品推荐

