WordPress Version: 6.3
/**
* Gets the user IDs of all users with no role on this site.
*
* @since 4.4.0
* @since 4.9.0 The `$site_id` parameter was added to support multisite.
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int|null $site_id Optional. The site ID to get users with no role for. Defaults to the current site.
* @return string[] Array of user IDs as strings.
*/
function wp_get_users_with_no_role($site_id = null)
{
global $wpdb;
if (!$site_id) {
$site_id = get_current_blog_id();
}
$prefix = $wpdb->get_blog_prefix($site_id);
if (is_multisite() && get_current_blog_id() != $site_id) {
switch_to_blog($site_id);
$role_names = wp_roles()->get_names();
restore_current_blog();
} else {
$role_names = wp_roles()->get_names();
}
$regex = implode('|', array_keys($role_names));
$regex = preg_replace('/[^a-zA-Z_\|-]/', '', $regex);
$users = $wpdb->get_col($wpdb->prepare("SELECT user_id\n\t\t\tFROM {$wpdb->usermeta}\n\t\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\t\tAND meta_value NOT REGEXP %s", $regex));
return $users;
}