WordPress中通过user ID获取order ID时is_array函数无法返回结果如何解决
WordPress代码问题排查及修复
现有代码问题清单
- 函数无返回值:is_array分支内执行完查询后没有
return语句,外部调用无法拿到查询结果 - 查询方法使用错误:仅需要获取单个
ref_id字段的值,使用$wpdb->get_results()会返回对象数组,不符合取值需求,应该使用$wpdb->get_var()直接获取单字段结果 - 缺省分支无处理逻辑:非数组类型的参数输入时,函数没有任何返回逻辑
- 无空查询结果兜底:如果数据库没有匹配到对应记录,没有返回默认值方便上层逻辑判断
修复后的代码
public function get_order_id( $params = 0 ) { global $wpdb; // 数组参数分支:传入user_id和course_id查询对应order ID if( is_array($params) ){ // 校验数组必填字段,避免索引不存在报错 if( !isset($params['user_id'], $params['course_id']) ) { return 0; } $query = $wpdb->prepare( "SELECT ref_id FROM {$wpdb->prefix}user_items WHERE user_id = %d AND item_id = %d AND ref_type = %s", $params['user_id'], $params['course_id'], 'order' ); // 直接获取单字段值,查询不到返回null,兜底返回0 return $wpdb->get_var($query) ?: 0; } // 非数组分支:可根据实际需求调整这部分逻辑,当前保留原参数直接返回的兼容逻辑 return is_numeric($params) ? intval($params) : 0; }
额外优化说明
- 把参数名从
$order_id改成了$params,避免参数名和实际传值语义不符导致的维护问题 - 增加了数组必填字段校验,避免传入数组缺少
user_id或course_id时抛出PHP警告 - 所有分支都有明确返回值,查询不到结果时统一返回0,方便上层调用时做判断
内容的提问来源于stack exchange,提问作者Ken Clay
相关产品推荐
相关产品推荐

