我有一个自定义插件,可以查询用户和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 不是字段,我看到了它是如何将其存储为配置字符串的,但是我看不到如何对此进行等效查询。我想念什么吗?

谢谢。

有帮助吗?

解决方案

您可以使用此功能:

// 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;
}

其他提示

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

$roles = array_map('trim',explode( ",", $roles ));

现在对我有用。

许可以下: CC-BY-SA归因
scroll top