当使用 `wc_get_order()` 获取订单失败时,该函数会返回 `false` 而非订单对象,直接调用 `->get_data()` 将触发“call to a member function on boolean”致

在 WooCommerce 开发中,wc_get_order( $order_id ) 是获取订单实例的标准方式。但它并非总是返回 WC_Order 对象——当传入的 $order_id 不存在、已被删除、ID 类型错误(如字符串未转整型)、或数据库异常时,该函数将返回布尔值 false。
你遇到的报错:
Fatal error: Uncaught Error: Call to a member function get_data() on boolean
正是源于以下代码未做类型校验:
$order_id = 12; $order = wc_get_order( $order_id ); $order_data = $order->get_data(); // ❌ $order 可能为 false!
推荐使用严格比较 !== false(而非 !$order,避免误判 ID 为 0 的订单):
$order_id = 12;
$order = wc_get_order( $order_id );
if ( $order !== false && $order instanceof WC_Order ) {
$order_data = $order->get_data(); // ✅ 安全调用
$order_id = $order_data['id'];
$order_parent_id = $order_data['parent_id'];
$order_status = $order_data['status'];
// 后续逻辑(如输出、日志、状态判断等)
error_log( "Order #{$order_id} status: {$order_status}" );
} else {
error_log( "⚠️ Failed to load order with ID: {$order_id}" );
// 可选:抛出异常、返回默认值、重定向或显示用户友好提示
}$order_id = absint( $_GET['order'] ?? 0 );
WooCommerce 的 wc_get_order() 是一个“防御性”函数——它优先保障健壮性,而非抛出异常。开发者有责任在调用其返回值的方法前,显式验证对象有效性。加上 !== false && instanceof WC_Order 双重检查,即可彻底规避此类致命错误,并提升代码的稳定性与可维护性。