我有一个查询用户和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
不是字段,我看到了它是如何存储为配置字符串的,但我不知道如何对此进行等效查询。我错过什么了吗?
谢谢
最合适的回答,由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;
}