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
|
|
|
final class WP_Site { |
19
|
|
|
|
20
|
|
|
/** |
21
|
|
|
* Site ID. |
22
|
|
|
* |
23
|
|
|
* A numeric string, for compatibility reasons. |
24
|
|
|
* |
25
|
|
|
* @since 4.5.0 |
26
|
|
|
* @access public |
27
|
|
|
* @var string |
28
|
|
|
*/ |
29
|
|
|
public $blog_id; |
30
|
|
|
|
31
|
|
|
/** |
32
|
|
|
* Domain of the site. |
33
|
|
|
* |
34
|
|
|
* @since 4.5.0 |
35
|
|
|
* @access public |
36
|
|
|
* @var string |
37
|
|
|
*/ |
38
|
|
|
public $domain = ''; |
39
|
|
|
|
40
|
|
|
/** |
41
|
|
|
* Path of the site. |
42
|
|
|
* |
43
|
|
|
* @since 4.5.0 |
44
|
|
|
* @access public |
45
|
|
|
* @var string |
46
|
|
|
*/ |
47
|
|
|
public $path = ''; |
48
|
|
|
|
49
|
|
|
/** |
50
|
|
|
* The ID of the site's parent network. |
51
|
|
|
* |
52
|
|
|
* Named "site" vs. "network" for legacy reasons. An individual site's "site" is |
53
|
|
|
* its network. |
54
|
|
|
* |
55
|
|
|
* A numeric string, for compatibility reasons. |
56
|
|
|
* |
57
|
|
|
* @since 4.5.0 |
58
|
|
|
* @access public |
59
|
|
|
* @var string |
60
|
|
|
*/ |
61
|
|
|
public $site_id = '0'; |
62
|
|
|
|
63
|
|
|
/** |
64
|
|
|
* The date on which the site was created or registered. |
65
|
|
|
* |
66
|
|
|
* @since 4.5.0 |
67
|
|
|
* @access public |
68
|
|
|
* @var string Date in MySQL's datetime format. |
69
|
|
|
*/ |
70
|
|
|
public $registered = '0000-00-00 00:00:00'; |
71
|
|
|
|
72
|
|
|
/** |
73
|
|
|
* The date and time on which site settings were last updated. |
74
|
|
|
* |
75
|
|
|
* @since 4.5.0 |
76
|
|
|
* @access public |
77
|
|
|
* @var string Date in MySQL's datetime format. |
78
|
|
|
*/ |
79
|
|
|
public $last_updated = '0000-00-00 00:00:00'; |
80
|
|
|
|
81
|
|
|
/** |
82
|
|
|
* Whether the site should be treated as public. |
83
|
|
|
* |
84
|
|
|
* A numeric string, for compatibility reasons. |
85
|
|
|
* |
86
|
|
|
* @since 4.5.0 |
87
|
|
|
* @access public |
88
|
|
|
* @var string |
89
|
|
|
*/ |
90
|
|
|
public $public = '1'; |
91
|
|
|
|
92
|
|
|
/** |
93
|
|
|
* Whether the site should be treated as archived. |
94
|
|
|
* |
95
|
|
|
* A numeric string, for compatibility reasons. |
96
|
|
|
* |
97
|
|
|
* @since 4.5.0 |
98
|
|
|
* @access public |
99
|
|
|
* @var string |
100
|
|
|
*/ |
101
|
|
|
public $archived = '0'; |
102
|
|
|
|
103
|
|
|
/** |
104
|
|
|
* Whether the site should be treated as mature. |
105
|
|
|
* |
106
|
|
|
* Handling for this does not exist throughout WordPress core, but custom |
107
|
|
|
* implementations exist that require the property to be present. |
108
|
|
|
* |
109
|
|
|
* A numeric string, for compatibility reasons. |
110
|
|
|
* |
111
|
|
|
* @since 4.5.0 |
112
|
|
|
* @access public |
113
|
|
|
* @var string |
114
|
|
|
*/ |
115
|
|
|
public $mature = '0'; |
116
|
|
|
|
117
|
|
|
/** |
118
|
|
|
* Whether the site should be treated as spam. |
119
|
|
|
* |
120
|
|
|
* A numeric string, for compatibility reasons. |
121
|
|
|
* |
122
|
|
|
* @since 4.5.0 |
123
|
|
|
* @access public |
124
|
|
|
* @var string |
125
|
|
|
*/ |
126
|
|
|
public $spam = '0'; |
127
|
|
|
|
128
|
|
|
/** |
129
|
|
|
* Whether the site should be treated as deleted. |
130
|
|
|
* |
131
|
|
|
* A numeric string, for compatibility reasons. |
132
|
|
|
* |
133
|
|
|
* @since 4.5.0 |
134
|
|
|
* @access public |
135
|
|
|
* @var string |
136
|
|
|
*/ |
137
|
|
|
public $deleted = '0'; |
138
|
|
|
|
139
|
|
|
/** |
140
|
|
|
* The language pack associated with this site. |
141
|
|
|
* |
142
|
|
|
* A numeric string, for compatibility reasons. |
143
|
|
|
* |
144
|
|
|
* @since 4.5.0 |
145
|
|
|
* @access public |
146
|
|
|
* @var string |
147
|
|
|
*/ |
148
|
|
|
public $lang_id = '0'; |
149
|
|
|
|
150
|
|
|
/** |
151
|
|
|
* Retrieves a site from the database by its ID. |
152
|
|
|
* |
153
|
|
|
* @static |
154
|
|
|
* @since 4.5.0 |
155
|
|
|
* @access public |
156
|
|
|
* |
157
|
|
|
* @global wpdb $wpdb WordPress database abstraction object. |
158
|
|
|
* |
159
|
|
|
* @param int $site_id The ID of the site to retrieve. |
160
|
|
|
* @return WP_Site|false The site's object if found. False if not. |
161
|
|
|
*/ |
162
|
|
View Code Duplication |
public static function get_instance( $site_id ) { |
|
|
|
|
163
|
|
|
global $wpdb; |
164
|
|
|
|
165
|
|
|
$site_id = (int) $site_id; |
166
|
|
|
if ( ! $site_id ) { |
167
|
|
|
return false; |
168
|
|
|
} |
169
|
|
|
|
170
|
|
|
$_site = wp_cache_get( $site_id, 'sites' ); |
171
|
|
|
|
172
|
|
|
if ( ! $_site ) { |
173
|
|
|
$_site = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->blogs} WHERE blog_id = %d LIMIT 1", $site_id ) ); |
174
|
|
|
|
175
|
|
|
if ( empty( $_site ) || is_wp_error( $_site ) ) { |
176
|
|
|
return false; |
177
|
|
|
} |
178
|
|
|
|
179
|
|
|
wp_cache_add( $site_id, $_site, 'sites' ); |
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
|
|
|
* @access public |
193
|
|
|
* |
194
|
|
|
* @param WP_Site|object $site A site object. |
195
|
|
|
*/ |
196
|
|
|
public function __construct( $site ) { |
197
|
|
|
foreach( get_object_vars( $site ) as $key => $value ) { |
198
|
|
|
$this->$key = $value; |
199
|
|
|
} |
200
|
|
|
} |
201
|
|
|
} |
202
|
|
|
|
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.