Пример #1
0
/**
 * 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;
}
Пример #2
0
/**
 * 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;
}
Пример #3
0
/**
 * 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;
}