WordPress Version: 4.6
/**
* Get the blogs a user belongs to.
*
* @since 3.0.0
*
* @global wpdb $wpdb WordPress database abstraction object.
*
* @param int $user_id User ID
* @param bool $all Whether to retrieve all blogs, or only blogs that are not
* marked as deleted, archived, or spam.
* @return array A list of the user's blogs. An empty array if the user doesn't exist
* or belongs to no blogs.
*/
function get_blogs_of_user($user_id, $all = false)
{
global $wpdb;
$user_id = (int) $user_id;
// Logged out users can't have blogs
if (empty($user_id)) {
return array();
}
/**
* Filters the list of a user's sites before it is populated.
*
* Passing a non-null value to the filter will effectively short circuit
* get_blogs_of_user(), returning that value instead.
*
* @since 4.6.0
*
* @param null|array $blogs An array of WP_Site objects of which the user is a member.
* @param int $user_id User ID.
* @param bool $all Whether the returned array should contain all sites, including
* those marked 'deleted', 'archived', or 'spam'. Default false.
*/
$blogs = apply_filters('pre_get_blogs_of_user', null, $user_id, $all);
if (null !== $blogs) {
return $blogs;
}
$keys = get_user_meta($user_id);
if (empty($keys)) {
return array();
}
if (!is_multisite()) {
$blog_id = get_current_blog_id();
$blogs = array($blog_id => new stdClass());
$blogs[$blog_id]->userblog_id = $blog_id;
$blogs[$blog_id]->blogname = get_option('blogname');
$blogs[$blog_id]->domain = '';
$blogs[$blog_id]->path = '';
$blogs[$blog_id]->site_id = 1;
$blogs[$blog_id]->siteurl = get_option('siteurl');
$blogs[$blog_id]->archived = 0;
$blogs[$blog_id]->spam = 0;
$blogs[$blog_id]->deleted = 0;
return $blogs;
}
$blogs = array();
if (isset($keys[$wpdb->base_prefix . 'capabilities']) && defined('MULTISITE')) {
$blog = get_blog_details(1);
if ($blog && isset($blog->domain) && ($all || !$blog->archived && !$blog->spam && !$blog->deleted)) {
$blogs[1] = (object) array('userblog_id' => 1, 'blogname' => $blog->blogname, 'domain' => $blog->domain, 'path' => $blog->path, 'site_id' => $blog->site_id, 'siteurl' => $blog->siteurl, 'archived' => $blog->archived, 'mature' => $blog->mature, 'spam' => $blog->spam, 'deleted' => $blog->deleted);
}
unset($keys[$wpdb->base_prefix . 'capabilities']);
}
$keys = array_keys($keys);
foreach ($keys as $key) {
if ('capabilities' !== substr($key, -12)) {
continue;
}
if ($wpdb->base_prefix && 0 !== strpos($key, $wpdb->base_prefix)) {
continue;
}
$blog_id = str_replace(array($wpdb->base_prefix, '_capabilities'), '', $key);
if (!is_numeric($blog_id)) {
continue;
}
$blog_id = (int) $blog_id;
$blog = get_blog_details($blog_id);
if ($blog && isset($blog->domain) && ($all || !$blog->archived && !$blog->spam && !$blog->deleted)) {
$blogs[$blog_id] = (object) array('userblog_id' => $blog_id, 'blogname' => $blog->blogname, 'domain' => $blog->domain, 'path' => $blog->path, 'site_id' => $blog->site_id, 'siteurl' => $blog->siteurl, 'archived' => $blog->archived, 'mature' => $blog->mature, 'spam' => $blog->spam, 'deleted' => $blog->deleted);
}
}
/**
* Filters the list of blogs a user belongs to.
*
* @since MU
*
* @param array $blogs An array of blog objects belonging to the user.
* @param int $user_id User ID.
* @param bool $all Whether the returned blogs array should contain all blogs, including
* those marked 'deleted', 'archived', or 'spam'. Default false.
*/
return apply_filters('get_blogs_of_user', $blogs, $user_id, $all);
}