/** * Retrieve the details for a blog from the blogs table and blog options. * * @since MU * * @global wpdb $wpdb WordPress database abstraction object. * * @param int|string|array $fields Optional. A blog ID, a blog slug, or an array of fields to query against. * If not specified the current blog ID is used. * @param bool $get_all Whether to retrieve all details or only the details in the blogs table. * Default is true. * @return object|false Blog details on success. False on failure. */ function get_blog_details($fields = null, $get_all = true) { global $wpdb; if (is_array($fields)) { if (isset($fields['blog_id'])) { $blog_id = $fields['blog_id']; } elseif (isset($fields['domain']) && isset($fields['path'])) { $key = md5($fields['domain'] . $fields['path']); $blog = wp_cache_get($key, 'blog-lookup'); if (false !== $blog) { return $blog; } if (substr($fields['domain'], 0, 4) == 'www.') { $nowww = substr($fields['domain'], 4); $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain IN (%s,%s) AND path = %s ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields['domain'], $fields['path'])); } else { $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain = %s AND path = %s", $fields['domain'], $fields['path'])); } if ($blog) { wp_cache_set($blog->blog_id . 'short', $blog, 'blog-details'); $blog_id = $blog->blog_id; } else { return false; } } elseif (isset($fields['domain']) && is_subdomain_install()) { $key = md5($fields['domain']); $blog = wp_cache_get($key, 'blog-lookup'); if (false !== $blog) { return $blog; } if (substr($fields['domain'], 0, 4) == 'www.') { $nowww = substr($fields['domain'], 4); $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain IN (%s,%s) ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields['domain'])); } else { $blog = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$wpdb->blogs} WHERE domain = %s", $fields['domain'])); } if ($blog) { wp_cache_set($blog->blog_id . 'short', $blog, 'blog-details'); $blog_id = $blog->blog_id; } else { return false; } } else { return false; } } else { if (!$fields) { $blog_id = get_current_blog_id(); } elseif (!is_numeric($fields)) { $blog_id = get_id_from_blogname($fields); } else { $blog_id = $fields; } } $blog_id = (int) $blog_id; $all = $get_all == true ? '' : 'short'; $details = wp_cache_get($blog_id . $all, 'blog-details'); if ($details) { if (!is_object($details)) { if ($details == -1) { return false; } else { // Clear old pre-serialized objects. Cache clients do better with that. wp_cache_delete($blog_id . $all, 'blog-details'); unset($details); } } else { return $details; } } // Try the other cache. if ($get_all) { $details = wp_cache_get($blog_id . 'short', 'blog-details'); } else { $details = wp_cache_get($blog_id, 'blog-details'); // If short was requested and full cache is set, we can return. if ($details) { if (!is_object($details)) { if ($details == -1) { return false; } else { // Clear old pre-serialized objects. Cache clients do better with that. wp_cache_delete($blog_id, 'blog-details'); unset($details); } } else { return $details; } } } if (empty($details)) { $details = WP_Site::get_instance($blog_id); if (!$details) { // Set the full cache. wp_cache_set($blog_id, -1, 'blog-details'); return false; } } if (!$details instanceof WP_Site) { $details = new WP_Site($details); } if (!$get_all) { wp_cache_set($blog_id . $all, $details, 'blog-details'); return $details; } switch_to_blog($blog_id); $details->blogname = get_option('blogname'); $details->siteurl = get_option('siteurl'); $details->post_count = get_option('post_count'); $details->home = get_option('home'); restore_current_blog(); /** * Filter a blog's details. * * @since MU * * @param object $details The blog details. */ $details = apply_filters('blog_details', $details); wp_cache_set($blog_id . $all, $details, 'blog-details'); $key = md5($details->domain . $details->path); wp_cache_set($key, $details, 'blog-lookup'); return $details; }
/** * Retrieves site data given a site ID or site object. * * Site data will be cached and returned after being passed through a filter. * If the provided site is empty, the current site global will be used. * * @since 4.6.0 * * @global WP_Site $current_blog The current site. * * @param WP_Site|int|null $site Optional. Site to retrieve. Default is the current site. * @return WP_Site|null The site object or null if not found. */ function get_site(&$site = null) { global $current_blog; if (empty($site) && isset($current_blog)) { $site = $current_blog; } if ($site instanceof WP_Site) { $_site = $site; } elseif (is_object($site)) { $_site = new WP_Site($site); } else { $_site = WP_Site::get_instance($site); } if (!$_site) { return null; } /** * Fires after a site is retrieved. * * @since 4.6.0 * * @param WP_Site $_site Site data. */ $_site = apply_filters('get_site', $_site); return $_site; }
/** * Retrieves site data given a site ID or site object. * * Site data will be cached and returned after being passed through a filter. * If the provided site is empty, the current site global will be used. * * @since 4.6.0 * * @global WP_Site $current_blog The current site. * * @param WP_Site|int $site Site to retrieve. * @param string $output Optional. Type of output to return. OBJECT or ARRAY_A or ARRAY_N constants. * @return WP_Site|array|null Depends on $output value. */ function get_site(&$site = null, $output = OBJECT) { global $current_blog; if (empty($site) && isset($current_blog)) { $site = $current_blog; } if ($site instanceof WP_Site) { $_site = $site; } elseif (is_object($site)) { $_site = new WP_Site($site); } else { $_site = WP_Site::get_instance($site); } if (!$_site) { return null; } /** * Fires after a site is retrieved. * * @since 4.6.0 * * @param mixed $_site Site data. */ $_site = apply_filters('get_site', $_site); if ($output == OBJECT) { return $_site; } elseif ($output == ARRAY_A) { return $_site->to_array(); } elseif ($output == ARRAY_N) { return array_values($_site->to_array()); } return $_site; }