Using WordPress ‘get_blogs_of_user’ PHP filter

The get_blogs_of_user WordPress PHP filter allows you to modify the list of sites a user belongs to.

Usage

add_filter('get_blogs_of_user', 'your_custom_function', 10, 3);
function your_custom_function($sites, $user_id, $all) {
    // your custom code here
    return $sites;
}

Parameters

  • $sites (object[]): An array of site objects belonging to the user.
  • $user_id (int): User ID.
  • $all (bool): Whether the returned sites array should contain all sites, including those marked ‘deleted’, ‘archived’, or ‘spam’. Default false.

More information

See WordPress Developer Resources: get_blogs_of_user

Examples

Exclude archived sites

Exclude archived sites from the list of sites a user belongs to.

add_filter('get_blogs_of_user', 'exclude_archived_sites', 10, 3);
function exclude_archived_sites($sites, $user_id, $all) {
    foreach ($sites as $key => $site) {
        if ($site->archived) {
            unset($sites[$key]);
        }
    }
    return $sites;
}

Add custom site to user’s list

Add a custom site to the list of sites a user belongs to.

add_filter('get_blogs_of_user', 'add_custom_site', 10, 3);
function add_custom_site($sites, $user_id, $all) {
    $custom_site = new stdClass();
    $custom_site->blog_id = 999;
    $custom_site->userblog_id = 999;
    $sites[] = $custom_site;
    return $sites;
}

Limit the number of sites returned

Limit the number of sites returned to a maximum of 5.

add_filter('get_blogs_of_user', 'limit_sites_returned', 10, 3);
function limit_sites_returned($sites, $user_id, $all) {
    return array_slice($sites, 0, 5);
}

Sort sites by blog ID

Sort the sites a user belongs to by their blog ID.

add_filter('get_blogs_of_user', 'sort_sites_by_blog_id', 10, 3);
function sort_sites_by_blog_id($sites, $user_id, $all) {
    usort($sites, function($a, $b) {
        return $a->blog_id <=> $b->blog_id;
    });
    return $sites;
}

Filter sites by user role

Return only the sites where the user has an ‘editor’ role.

add_filter('get_blogs_of_user', 'filter_sites_by_editor_role', 10, 3);
function filter_sites_by_editor_role($sites, $user_id, $all) {
    $filtered_sites = [];
    foreach ($sites as $site) {
        switch_to_blog($site->userblog_id);
        $user = get_user_by('id', $user_id);
        if (in_array('editor', $user->roles)) {
            $filtered_sites[] = $site;
        }
        restore_current_blog();
    }
    return $filtered_sites;
}