遍历WordPress用户时函数仅返回首个用户ID,如何修改实现逐个返回?
问题解决:让每个WordPress用户获取对应ACF分类字段值
你的代码问题出在两个核心点上:
algolia_user_record过滤器本身就是针对单个用户处理的,它的第二个参数就是当前正在处理的用户对象,但你的函数没接收这个参数,反而自行遍历所有用户,完全搞反了逻辑。return $attributes写在了foreach循环内部,第一次循环就直接返回结果,导致所有用户都只能拿到第一个用户的分类值。
修正后的代码:
add_filter( 'algolia_user_record', 'my_post_attributes', 10, 2 ); function my_post_attributes( $attributes, $user ) { // 直接使用过滤器传入的当前用户对象,无需自行遍历所有用户 $attributes['kategoriat'] = get_field('user_kategoriat', 'user_' . $user->ID ); return $attributes; }
关键修改说明:
- 函数参数新增
$user:algolia_user_record过滤器默认会传递两个参数,第二个就是当前处理的用户对象,必须在函数里接收它才能拿到当前用户的ID。 - 删除多余的
get_users遍历代码:不需要自己查询所有用户,过滤器已经帮你定位到了当前要处理的目标用户。 - 移除无效循环:现在不需要遍历,直接针对当前用户处理即可,确保每个用户的字段值都是自己对应的内容。
修改后,每个用户在生成Algolia记录时,都会用自身ID获取对应的user_kategoriat字段值,不会再出现所有用户共用第一个用户分类的问题。
内容的提问来源于stack exchange,提问作者Uprisen
相关产品推荐
相关产品推荐

