The pre_get_blogs_of_user filter allows you to modify the list of a user’s sites before it is populated.
Returning a non-null value will short circuit the get_blogs_of_user() function, returning the modified value instead.
Usage
add_filter('pre_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 null|object[]: An array of site objects that the user is a member of.
- $user_id int: The User ID.
- $all bool: Whether the returned array should contain all sites, including those marked ‘deleted’, ‘archived’, or ‘spam’. Default is false.
More Information
See WordPress Developer Resources: pre_get_blogs_of_user
Examples
Exclude archived sites
Exclude archived sites from the list of user’s sites.
add_filter('pre_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; }
Include only sites with a specific theme
Include only sites that use a specific theme.
add_filter('pre_get_blogs_of_user', 'filter_sites_by_theme', 10, 3); function filter_sites_by_theme($sites, $user_id, $all) { $filtered_sites = array(); $theme = 'my-theme'; foreach ($sites as $site) { switch_to_blog($site->userblog_id); if (get_template() == $theme) { $filtered_sites[] = $site; } restore_current_blog(); } return $filtered_sites; }
Sort sites by blog name
Sort the user’s sites by blog name.
add_filter('pre_get_blogs_of_user', 'sort_sites_by_blog_name', 10, 3); function sort_sites_by_blog_name($sites, $user_id, $all) { usort($sites, function($a, $b) { return strcmp($a->blogname, $b->blogname); }); return $sites; }
Limit the number of sites returned
Limit the number of sites returned for the user.
add_filter('pre_get_blogs_of_user', 'limit_user_sites', 10, 3); function limit_user_sites($sites, $user_id, $all) { $max_sites = 5; return array_slice($sites, 0, $max_sites); }
Remove sites marked as spam
Remove sites marked as spam from the list of user’s sites.
add_filter('pre_get_blogs_of_user', 'remove_spam_sites', 10, 3); function remove_spam_sites($sites, $user_id, $all) { foreach ($sites as $key => $site) { if ($site->spam) { unset($sites[$key]); } } return $sites; }