-
16-10-2019 - |
题
我有一个自定义插件,可以查询用户和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 ));
现在对我有用。