get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) ); if ( empty( $_site ) || is_wp_error( $_site ) ) { return false; } wp_cache_add( $site_id, $_site, 'sites' ); } return new WP_Site( $_site ); } /** * Creates a new WP_Site object. * * Will populate object properties from the object provided and assign other * default properties based on that information. * * @since 4.5.0 * @access public * * @param WP_Site|object $site A site object. */ public function __construct( $site ) { foreach( get_object_vars( $site ) as $key => $value ) { $this->$key = $value; } } /** * Converts an object to array. * * @since 4.6.0 * @access public * * @return array Object as array. */ public function to_array() { return get_object_vars( $this ); } /** * Getter. * * Allows current multisite naming conventions when getting properties. * Allows access to extended site properties. * * @since 4.6.0 * @access public * * @param string $key Property to get. * @return mixed Value of the property. Null if not available. */ public function __get( $key ) { switch ( $key ) { case 'id': return (int) $this->blog_id; case 'network_id': return (int) $this->site_id; case 'blogname': case 'siteurl': case 'post_count': case 'home': if ( ! did_action( 'ms_loaded' ) ) { return null; } $details = $this->get_details(); return $details->$key; } return null; } /** * Isset-er. * * Allows current multisite naming conventions when checking for properties. * Checks for extended site properties. * * @since 4.6.0 * @access public * * @param string $key Property to check if set. * @return bool Whether the property is set. */ public function __isset( $key ) { switch ( $key ) { case 'id': case 'network_id': return true; case 'blogname': case 'siteurl': case 'post_count': case 'home': if ( ! did_action( 'ms_loaded' ) ) { return false; } return true; } return false; } /** * Setter. * * Allows current multisite naming conventions while setting properties. * * @since 4.6.0 * @access public * * @param string $key Property to set. * @param mixed $value Value to assign to the property. */ public function __set( $key, $value ) { switch ( $key ) { case 'id': $this->blog_id = (string) $value; break; case 'network_id': $this->site_id = (string) $value; break; default: $this->$key = $value; } } /** * Retrieves the details for this site. * * This method is used internally to lazy-load the extended properties of a site. * * @since 4.6.0 * @access private * * @see WP_Site::__get() * * @return object A raw site object with all details included. */ private function get_details() { $details = wp_cache_get( $this->blog_id, 'site-details' ); if ( false === $details ) { switch_to_blog( $this->blog_id ); // Create a raw copy of the object for backwards compatibility with the filter below. $details = new stdClass(); foreach ( get_object_vars( $this ) as $key => $value ) { $details->$key = $value; } $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(); $cache_details = true; foreach ( array( 'blogname', 'siteurl', 'post_count', 'home' ) as $field ) { if ( false === $details->$field ) { $cache_details = false; break; } } if ( $cache_details ) { wp_cache_set( $this->blog_id, $details, 'site-details' ); } } /** * Filters a site's extended properties. * * @since 4.6.0 * * @param object $details The site details. */ $details = apply_filters( 'site_details', $details ); return $details; } }