使用WP_User_Query按用户分类法查询无效,求可行实现方法
如何基于ACF添加的分类法字段查询WordPress用户
嘿,这个问题我碰到过好多次——WordPress原生的WP_User_Query根本不支持tax_query参数!原因很简单:用户对象本身没有和分类法的原生关联,你用ACF给用户添加的分类法字段,本质是存在**用户元数据(user meta)**里的,所以得换用meta_query来实现你的需求。
为什么你的原查询无效?
tax_query是给文章查询(WP_Query)设计的参数,WP_User_Query根本不识别它,所以你之前的代码只会忽略tax_query部分,返回符合role、number等其他参数的所有用户。
正确的查询方式
根据你的ACF分类法字段是单选还是多选,我给你两种对应的写法:
1. 单选分类法字段的情况
如果你的category_level字段是单选,ACF默认会把选中的术语ID存在用户元里,直接用等于比较即可:
$args = [ 'role' => 'gebruiker', 'number' => $limit, 'offset' => $offset, 'meta_query' => [ [ 'key' => 'category_level', // 这里填你的ACF字段名称 'value' => 36, // 要匹配的术语ID 'compare' => '=' ] ] ]; $user_query = new WP_User_Query($args);
2. 多选分类法字段的情况
如果是多选字段,ACF会把选中的术语ID序列化成数组存在元数据里,这时候要用LIKE比较,而且最好序列化要匹配的ID来保证准确性:
$args = [ 'role' => 'gebruiker', 'number' => $limit, 'offset' => $offset, 'meta_query' => [ [ 'key' => 'category_level', 'value' => serialize(strval(36)), // 序列化要匹配的术语ID 'compare' => 'LIKE' ] ] ]; $user_query = new WP_User_Query($args);
额外提示
如果你不确定ACF存储的格式,可以直接去数据库的wp_usermeta表(前缀可能不同)里,找meta_key等于你的ACF字段名的记录,看meta_value是纯数字、字符串还是序列化数组,这样能更精准地调整查询参数。
要是你需要更复杂的查询(比如同时匹配多个术语、或者多个分类法字段),只需要在meta_query里添加更多条件组,和处理普通用户元字段的逻辑完全一致。
内容的提问来源于stack exchange,提问作者Schotsl
相关产品推荐
相关产品推荐

