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

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。具体触发场景和修复方案如下:

问题根源

  1. 短代码可能在非订单成功页面被加载,此时$wp->query_vars['order-received']不存在,$order_id被转为0,wc_get_order(0)返回false。
  2. 代码中未全局声明$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 10:57:22