Diff: STRATO-apps/wordpress_03/app/wp-includes/class-wp-site.php

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + <?php
2 + /**
3 + * Site API: WP_Site class
4 + *
5 + * @package WordPress
6 + * @subpackage Multisite
7 + * @since 4.5.0
8 + */
9 +
10 + /**
11 + * Core class used for interacting with a multisite site.
12 + *
13 + * This class is used during load to populate the `$current_blog` global and
14 + * setup the current site.
15 + *
16 + * @since 4.5.0
17 + *
18 + * @property int $id
19 + * @property int $network_id
20 + * @property string $blogname
21 + * @property string $siteurl
22 + * @property int $post_count
23 + * @property string $home
24 + */
25 + #[AllowDynamicProperties]
26 + final class WP_Site {
27 +
28 + /**
29 + * Site ID.
30 + *
31 + * Named "blog" vs. "site" for legacy reasons.
32 + *
33 + * A numeric string, for compatibility reasons.
34 + *
35 + * @since 4.5.0
36 + * @var string
37 + */
38 + public $blog_id;
39 +
40 + /**
41 + * Domain of the site.
42 + *
43 + * @since 4.5.0
44 + * @var string
45 + */
46 + public $domain = '';
47 +
48 + /**
49 + * Path of the site.
50 + *
51 + * @since 4.5.0
52 + * @var string
53 + */
54 + public $path = '';
55 +
56 + /**
57 + * The ID of the site's parent network.
58 + *
59 + * Named "site" vs. "network" for legacy reasons. An individual site's "site" is
60 + * its network.
61 + *
62 + * A numeric string, for compatibility reasons.
63 + *
64 + * @since 4.5.0
65 + * @var string
66 + */
67 + public $site_id = '0';
68 +
69 + /**
70 + * The date and time on which the site was created or registered.
71 + *
72 + * @since 4.5.0
73 + * @var string Date in MySQL's datetime format.
74 + */
75 + public $registered = '0000-00-00 00:00:00';
76 +
77 + /**
78 + * The date and time on which site settings were last updated.
79 + *
80 + * @since 4.5.0
81 + * @var string Date in MySQL's datetime format.
82 + */
83 + public $last_updated = '0000-00-00 00:00:00';
84 +
85 + /**
86 + * Whether the site should be treated as public.
87 + *
88 + * A numeric string, for compatibility reasons.
89 + *
90 + * @since 4.5.0
91 + * @var string
92 + */
93 + public $public = '1';
94 +
95 + /**
96 + * Whether the site should be treated as archived.
97 + *
98 + * A numeric string, for compatibility reasons.
99 + *
100 + * @since 4.5.0
101 + * @var string
102 + */
103 + public $archived = '0';
104 +
105 + /**
106 + * Whether the site should be treated as mature.
107 + *
108 + * Handling for this does not exist throughout WordPress core, but custom
109 + * implementations exist that require the property to be present.
110 + *
111 + * A numeric string, for compatibility reasons.
112 + *
113 + * @since 4.5.0
114 + * @var string
115 + */
116 + public $mature = '0';
117 +
118 + /**
119 + * Whether the site should be treated as spam.
120 + *
121 + * A numeric string, for compatibility reasons.
122 + *
123 + * @since 4.5.0
124 + * @var string
125 + */
126 + public $spam = '0';
127 +
128 + /**
129 + * Whether the site should be treated as flagged for deletion.
130 + *
131 + * A numeric string, for compatibility reasons.
132 + *
133 + * @since 4.5.0
134 + * @var string
135 + */
136 + public $deleted = '0';
137 +
138 + /**
139 + * The language pack associated with this site.
140 + *
141 + * A numeric string, for compatibility reasons.
142 + *
143 + * @since 4.5.0
144 + * @var string
145 + */
146 + public $lang_id = '0';
147 +
148 + /**
149 + * Retrieves a site from the database by its ID.
150 + *
151 + * @since 4.5.0
152 + *
153 + * @global wpdb $wpdb WordPress database abstraction object.
154 + *
155 + * @param int $site_id The ID of the site to retrieve.
156 + * @return WP_Site|false The site's object if found. False if not.
157 + */
158 + public static function get_instance( $site_id ) {
159 + global $wpdb;
160 +
161 + $site_id = (int) $site_id;
162 + if ( ! $site_id ) {
163 + return false;
164 + }
165 +
166 + $_site = wp_cache_get( $site_id, 'sites' );
167 +
168 + if ( false === $_site ) {
169 + $_site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) );
170 +
171 + if ( empty( $_site ) || is_wp_error( $_site ) ) {
172 + $_site = -1;
173 + }
174 +
175 + wp_cache_add( $site_id, $_site, 'sites' );
176 + }
177 +
178 + if ( is_numeric( $_site ) ) {
179 + return false;
180 + }
181 +
182 + return new WP_Site( $_site );
183 + }
184 +
185 + /**
186 + * Creates a new WP_Site object.
187 + *
188 + * Will populate object properties from the object provided and assign other
189 + * default properties based on that information.
190 + *
191 + * @since 4.5.0
192 + *
193 + * @param WP_Site|object $site A site object.
194 + */
195 + public function __construct( $site ) {
196 + foreach ( get_object_vars( $site ) as $key => $value ) {
197 + $this->$key = $value;
198 + }
199 + }
200 +
201 + /**
202 + * Converts an object to array.
203 + *
204 + * @since 4.6.0
205 + *
206 + * @return array Object as array.
207 + */
208 + public function to_array() {
209 + return get_object_vars( $this );
210 + }
211 +
212 + /**
213 + * Getter.
214 + *
215 + * Allows current multisite naming conventions when getting properties.
216 + * Allows access to extended site properties.
217 + *
218 + * @since 4.6.0
219 + *
220 + * @param string $key Property to get.
221 + * @return mixed Value of the property. Null if not available.
222 + */
223 + public function __get( $key ) {
224 + switch ( $key ) {
225 + case 'id':
226 + return (int) $this->blog_id;
227 + case 'network_id':
228 + return (int) $this->site_id;
229 + case 'blogname':
230 + case 'siteurl':
231 + case 'post_count':
232 + case 'home':
233 + default: // Custom properties added by 'site_details' filter.
234 + if ( ! did_action( 'ms_loaded' ) ) {
235 + return null;
236 + }
237 +
238 + $details = $this->get_details();
239 + if ( isset( $details->$key ) ) {
240 + return $details->$key;
241 + }
242 + }
243 +
244 + return null;
245 + }
246 +
247 + /**
248 + * Isset-er.
249 + *
250 + * Allows current multisite naming conventions when checking for properties.
251 + * Checks for extended site properties.
252 + *
253 + * @since 4.6.0
254 + *
255 + * @param string $key Property to check if set.
256 + * @return bool Whether the property is set.
257 + */
258 + public function __isset( $key ) {
259 + switch ( $key ) {
260 + case 'id':
261 + case 'network_id':
262 + return true;
263 + case 'blogname':
264 + case 'siteurl':
265 + case 'post_count':
266 + case 'home':
267 + if ( ! did_action( 'ms_loaded' ) ) {
268 + return false;
269 + }
270 + return true;
271 + default: // Custom properties added by 'site_details' filter.
272 + if ( ! did_action( 'ms_loaded' ) ) {
273 + return false;
274 + }
275 +
276 + $details = $this->get_details();
277 + if ( isset( $details->$key ) ) {
278 + return true;
279 + }
280 + }
281 +
282 + return false;
283 + }
284 +
285 + /**
286 + * Setter.
287 + *
288 + * Allows current multisite naming conventions while setting properties.
289 + *
290 + * @since 4.6.0
291 + *
292 + * @param string $key Property to set.
293 + * @param mixed $value Value to assign to the property.
294 + */
295 + public function __set( $key, $value ) {
296 + switch ( $key ) {
297 + case 'id':
298 + $this->blog_id = (string) $value;
299 + break;
300 + case 'network_id':
301 + $this->site_id = (string) $value;
302 + break;
303 + default:
304 + $this->$key = $value;
305 + }
306 + }
307 +
308 + /**
309 + * Retrieves the details for this site.
310 + *
311 + * This method is used internally to lazy-load the extended properties of a site.
312 + *
313 + * @since 4.6.0
314 + *
315 + * @see WP_Site::__get()
316 + *
317 + * @return stdClass A raw site object with all details included.
318 + */
319 + private function get_details() {
320 + $details = wp_cache_get( $this->blog_id, 'site-details' );
321 +
322 + if ( false === $details ) {
323 +
324 + switch_to_blog( $this->blog_id );
325 + // Create a raw copy of the object for backward compatibility with the filter below.
326 + $details = new stdClass();
327 + foreach ( get_object_vars( $this ) as $key => $value ) {
328 + $details->$key = $value;
329 + }
330 + $details->blogname = get_option( 'blogname' );
331 + $details->siteurl = get_option( 'siteurl' );
332 + $details->post_count = get_option( 'post_count' );
333 + $details->home = get_option( 'home' );
334 + restore_current_blog();
335 +
336 + wp_cache_set( $this->blog_id, $details, 'site-details' );
337 + }
338 +
339 + /** This filter is documented in wp-includes/ms-blogs.php */
340 + $details = apply_filters_deprecated( 'blog_details', array( $details ), '4.7.0', 'site_details' );
341 +
342 + /**
343 + * Filters a site's extended properties.
344 + *
345 + * @since 4.6.0
346 + *
347 + * @param stdClass $details The site details.
348 + */
349 + $details = apply_filters( 'site_details', $details );
350 +
351 + return $details;
352 + }
353 + }
354 +