query users by role

时间:2010-12-21 作者:benstraw

我有一个查询用户和usermeta的自定义插件,但我现在需要从结果中筛选管理员。我的sql查询的一个非常简化的版本是:

SELECT * FROM usermeta LEFT JOIN users ON users.ID = user_id 
WHERE meta_key = \'last_name\' AND 
user_role != \'admin\' 
ORDER BY meta_value 
ASC LIMIT 0, 25
user_role 不是字段,我看到了它是如何存储为配置字符串的,但我不知道如何对此进行等效查询。我错过什么了吗?

谢谢

2 个回复
最合适的回答,由SO网友:Anh Tran 整理而成

您可以使用此功能:

// get users with specified roles
function getUsersWithRole( $roles ) {
    global $wpdb;
    if ( ! is_array( $roles ) )
        $roles = array_walk( explode( ",", $roles ), \'trim\' );
    $sql = \'
        SELECT  ID, display_name
        FROM        \' . $wpdb->users . \' INNER JOIN \' . $wpdb->usermeta . \'
        ON          \' . $wpdb->users . \'.ID             =       \' . $wpdb->usermeta . \'.user_id
        WHERE       \' . $wpdb->usermeta . \'.meta_key        =       \\\'\' . $wpdb->prefix . \'capabilities\\\'
        AND     (
    \';
    $i = 1;
    foreach ( $roles as $role ) {
        $sql .= \' \' . $wpdb->usermeta . \'.meta_value    LIKE    \\\'%"\' . $role . \'"%\\\' \';
        if ( $i < count( $roles ) ) $sql .= \' OR \';
        $i++;
    }
    $sql .= \' ) \';
    $sql .= \' ORDER BY display_name \';
    $userIDs = $wpdb->get_col( $sql );
    return $userIDs;
}

SO网友:user1583875

函数中的第三行对我不起作用array_walk 返回布尔值,而不是所需的数组。我已将第3行更改为:

$roles = array_map(\'trim\',explode( ",", $roles ));
现在它对我有效。

结束

相关推荐

为什么WordPress从MySQL获得的帖子来自虚拟主机名,而不是直接主机名?

我正在Mac上开发一个WordPress网站,运行OS X 10.6.4。在开发过程中,我使用OS X的内置Apache服务器在本地运行该站点。我已经安装了WordPress,并将其连接到OS X的MySQL,没有问题。该网站似乎运行良好,我可以发布、编辑等。WordPress安装在一个名为~/Sites/mysite.dev.我还定制了.hosts 文件和Apachehttpd-vhosts.conf 文件,以重定向对mysite的请求。请转到这个文件夹。所以当我进去的时候http://mysite.d