我正在使用名为 Userpro 的插件为我的用户提供额外的元信息。特别是一个字段,称为business_category
,它为数组中的每个用户存储一个类别列表。数据库中的信息看起来有点像a:2:{i:0;s:17:"-Entrepreneurship";i:1;s:11:"-Leadership";}
。
我知道可以用get_users( $args );
查询WP用户,但是因为我查询的字段是一个数组,所以我不确定从哪里开始。
非常感谢任何帮助。谢谢!
答案 0 :(得分:3)
如果您控制数据的存储方式,那么明显的建议是将信息拆分为单独的元键。但是,由于情况并非如此,我们必须使用更加丑陋的方法解决这个问题。我过去做过这个,我对它不满意,但有时你只需要这样做。
请注意,随着usermeta
表的增长,最终此查询可能会开始权衡您的系统。因此,最终您可能必须找到将此信息拆分为单独的meta_keys的方法,或者只是单独存储business_category
。
function get_users_by_business_category( $category ) {
return get_users( array(
'meta_query' => array(
array(
'key' => 'business_category',
'value' => gen_sql_like( false, $category ),
'compare' => 'LIKE',
)
),
) );
}
function gen_sql_like( $key = false, $value ) {
if ( $key ) {
return str_replace( array( 'a:1:{', '}' ), array( '', '' ), serialize( array( $key => $value ) ) );
} else {
return str_replace( array( 'a:1:{i:0;', '}' ), array( '', '' ), serialize( array( $value ) ) );
}
}
以下是一个示例用法:
$users = get_users_by_business_category( '-Entrepreneurship' );
所以这里发生的是我们序列化一个包含我们搜索值的数组 - 在本例中是“-Entrepreneurship”,我们去掉了数组序列化定义的开头和结尾。所以我们'value'
的{{1}}部分就是这样:
meta_query
将s:17:"-Entrepreneurship";
设置为compare
会使WordPress在我们的搜索值之前和之后添加LIKE
,因此在最终查询中它实际上会是这样的:%
等等它会匹配任何包含“-Entrepreneurship”的记录。
答案 1 :(得分:1)
这是执行该技巧的代码,与上面发布的其他用户非常相似。
$args = array(
'meta_query' => array(
array(
'key' => 'business_category',
'value' => 'entrepreneurship',
'compare' => 'LIKE'
)
)
);
答案 2 :(得分:0)
用户个人资料中的新字段将保存为元数据。因此,您需要使用meta_key和meta_value进行查询。
试试这个,
function get_user_by_meta_data( $meta_key, $meta_value ) {
// Query for users based on the meta data
$user_query = new WP_User_Query(
array(
'meta_key' => $meta_key,
'meta_value' => $meta_value
)
);
// Get the results from the query, returning the first user
$users = $user_query->get_results();
if($users){
return $users[0];
}else{
return false;
}
} // end get_user_by_meta_data
$getResult = get_user_by_meta_data('business_category', 1); // Example
我希望这会有所帮助。