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'; }
额外优化建议
- 简化用户数据获取:其实
WP_User_Query返回的$author对象本身已经包含了用户的基础数据和元字段,你可以直接用$author->first_name,不需要再调用get_userdata(),除非你需要一些特殊的用户信息:foreach ( $authors as $author ) { echo $author->first_name . '<br>'; } - 优化查询数量参数:把
'number' => 999999改成'number' => -1,这是WordPress官方推荐的获取所有结果的写法,比写一个超大数字更规范。 - 调整 sanitize 顺序:先执行
stripslashes再做sanitize_text_field,避免转义字符被错误处理:$search_term = sanitize_text_field( stripslashes( $_GET['member'] ) );
这样修改后,你应该就能看到所有匹配的用户结果了!
内容的提问来源于stack exchange,提问作者PixelBorder
相关产品推荐
相关产品推荐

