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

WP_User_Query仅返回1条结果问题求助

解决WP_User_Query仅返回单条结果的问题

我一眼就发现了问题所在——你的循环代码写法有误,导致即便查询到了多条用户结果,最终也只会输出最后一条!

问题根源

看这段代码:

foreach ( $authors as $author ) $author_info = get_userdata( $author->ID );
echo $author_info->first_name;

因为你没有用大括号{}包裹循环体,PHP只会把紧跟在foreach后的那一行代码(也就是$author_info = get_userdata( $author->ID );)当作循环执行的内容。循环结束后,$author_info只会保存最后一个用户的数据,然后你只执行了一次echo,自然就只看到一条结果了。

修正后的代码

把循环部分改成这样,用大括号包裹循环内的所有操作:

// Check for results
if ( ! empty( $authors ) ) {
    foreach ( $authors as $author ) {
        $author_info = get_userdata( $author->ID );
        echo $author_info->first_name . '<br>'; // 加上换行方便区分多条结果
    }
} else {
    echo 'No members found';
}

额外优化建议

  1. 简化用户数据获取:其实WP_User_Query返回的$author对象本身已经包含了用户的基础数据和元字段,你可以直接用$author->first_name,不需要再调用get_userdata(),除非你需要一些特殊的用户信息:
    foreach ( $authors as $author ) {
        echo $author->first_name . '<br>';
    }
    
  2. 优化查询数量参数:把'number' => 999999改成'number' => -1,这是WordPress官方推荐的获取所有结果的写法,比写一个超大数字更规范。
  3. 调整 sanitize 顺序:先执行stripslashes再做sanitize_text_field,避免转义字符被错误处理:
    $search_term = sanitize_text_field( stripslashes( $_GET['member'] ) );
    

这样修改后,你应该就能看到所有匹配的用户结果了!

内容的提问来源于stack exchange,提问作者PixelBorder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:15:08