wp_get_users_with_no_role

The timeline below displays how wordpress function wp_get_users_with_no_role has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

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

WordPress Version: 6.2

/**
 * 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("\n\t\tSELECT user_id\n\t\tFROM {$wpdb->usermeta}\n\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\tAND meta_value NOT REGEXP %s\n\t", $regex));
    return $users;
}

WordPress Version: 6.1

/**
 * 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.
 *
 * @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("\n\t\tSELECT user_id\n\t\tFROM {$wpdb->usermeta}\n\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\tAND meta_value NOT REGEXP %s\n\t", $regex));
    return $users;
}

WordPress Version: 5.4

/**
 * Get 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.
 *
 * @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("\n\t\tSELECT user_id\n\t\tFROM {$wpdb->usermeta}\n\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\tAND meta_value NOT REGEXP %s\n\t", $regex));
    return $users;
}

WordPress Version: 4.9

/**
 * Get 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.
 *
 * @param int|null $site_id Optional. The site ID to get users with no role for. Defaults to the current site.
 * @return array Array of user IDs.
 */
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() && $site_id != get_current_blog_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("\n\t\tSELECT user_id\n\t\tFROM {$wpdb->usermeta}\n\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\tAND meta_value NOT REGEXP %s\n\t", $regex));
    return $users;
}

WordPress Version: 4.7

/**
 * Get the user IDs of all users with no role on this site.
 *
 * This function returns an empty array when used on Multisite.
 *
 * @since 4.4.0
 *
 * @return array Array of user IDs.
 */
function wp_get_users_with_no_role()
{
    global $wpdb;
    if (is_multisite()) {
        return array();
    }
    $prefix = $wpdb->get_blog_prefix();
    $regex = implode('|', array_keys(wp_roles()->get_names()));
    $regex = preg_replace('/[^a-zA-Z_\|-]/', '', $regex);
    $users = $wpdb->get_col($wpdb->prepare("\n\t\tSELECT user_id\n\t\tFROM {$wpdb->usermeta}\n\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\tAND meta_value NOT REGEXP %s\n\t", $regex));
    return $users;
}

WordPress Version: 4.4

/**
 * Get the user IDs of all users with no role on this site.
 *
 * This function returns an empty array when used on Multisite.
 *
 * @since 4.4.0
 *
 * @return array Array of user IDs.
 */
function wp_get_users_with_no_role()
{
    global $wpdb;
    if (is_multisite()) {
        return array();
    }
    $prefix = $wpdb->get_blog_prefix();
    $regex = implode('|', wp_roles()->get_names());
    $regex = preg_replace('/[^a-zA-Z_\|-]/', '', $regex);
    $users = $wpdb->get_col($wpdb->prepare("\n\t\tSELECT user_id\n\t\tFROM {$wpdb->usermeta}\n\t\tWHERE meta_key = '{$prefix}capabilities'\n\t\tAND meta_value NOT REGEXP %s\n\t", $regex));
    return $users;
}