获取具有特定usermeta值的所有wordpress用户

时间:2015-12-17 07:05:57

标签: php wordpress

我正在使用名为 Userpro 的插件为我的用户提供额外的元信息。特别是一个字段,称为business_category,它为数组中的每个用户存储一个类别列表。数据库中的信息看起来有点像a:2:{i:0;s:17:"-Entrepreneurship";i:1;s:11:"-Leadership";}

我知道可以用get_users( $args );查询WP用户,但是因为我查询的字段是一个数组,所以我不确定从哪里开始。

非常感谢任何帮助。谢谢!

3 个答案:

答案 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

我希望这会有所帮助。