123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- <?php
- /**
- * Site API: WP_Site class
- *
- * @package WordPress
- * @subpackage Multisite
- * @since 4.5.0
- */
- /**
- * Core class used for interacting with a multisite site.
- *
- * This class is used during load to populate the `$current_blog` global and
- * setup the current site.
- *
- * @since 4.5.0
- *
- * @property int $id
- * @property int $network_id
- * @property string $blogname
- * @property string $siteurl
- * @property int $post_count
- * @property string $home
- */
- final class WP_Site {
- /**
- * Site ID.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $blog_id;
- /**
- * Domain of the site.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $domain = '';
- /**
- * Path of the site.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $path = '';
- /**
- * The ID of the site's parent network.
- *
- * Named "site" vs. "network" for legacy reasons. An individual site's "site" is
- * its network.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $site_id = '0';
- /**
- * The date on which the site was created or registered.
- *
- * @since 4.5.0
- * @access public
- * @var string Date in MySQL's datetime format.
- */
- public $registered = '0000-00-00 00:00:00';
- /**
- * The date and time on which site settings were last updated.
- *
- * @since 4.5.0
- * @access public
- * @var string Date in MySQL's datetime format.
- */
- public $last_updated = '0000-00-00 00:00:00';
- /**
- * Whether the site should be treated as public.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $public = '1';
- /**
- * Whether the site should be treated as archived.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $archived = '0';
- /**
- * Whether the site should be treated as mature.
- *
- * Handling for this does not exist throughout WordPress core, but custom
- * implementations exist that require the property to be present.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $mature = '0';
- /**
- * Whether the site should be treated as spam.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $spam = '0';
- /**
- * Whether the site should be treated as deleted.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $deleted = '0';
- /**
- * The language pack associated with this site.
- *
- * A numeric string, for compatibility reasons.
- *
- * @since 4.5.0
- * @access public
- * @var string
- */
- public $lang_id = '0';
- /**
- * Retrieves a site from the database by its ID.
- *
- * @static
- * @since 4.5.0
- * @access public
- *
- * @global wpdb $wpdb WordPress database abstraction object.
- *
- * @param int $site_id The ID of the site to retrieve.
- * @return WP_Site|false The site's object if found. False if not.
- */
- public static function get_instance( $site_id ) {
- global $wpdb;
- $site_id = (int) $site_id;
- if ( ! $site_id ) {
- return false;
- }
- $_site = wp_cache_get( $site_id, 'sites' );
- if ( ! $_site ) {
- $_site = $wpdb->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':
- default: // Custom properties added by 'site_details' filter.
- if ( ! did_action( 'ms_loaded' ) ) {
- return null;
- }
- $details = $this->get_details();
- if ( isset( $details->$key ) ) {
- 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;
- default: // Custom properties added by 'site_details' filter.
- if ( ! did_action( 'ms_loaded' ) ) {
- return false;
- }
- $details = $this->get_details();
- if ( isset( $details->$key ) ) {
- 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 stdClass 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();
- wp_cache_set( $this->blog_id, $details, 'site-details' );
- }
- /** This filter is documented in wp-includes/ms-blogs.php */
- $details = apply_filters_deprecated( 'blog_details', array( $details ), '4.7.0', 'site_details' );
- /**
- * Filters a site's extended properties.
- *
- * @since 4.6.0
- *
- * @param stdClass $details The site details.
- */
- $details = apply_filters( 'site_details', $details );
- return $details;
- }
- }
|