1 | if( !function_exists('wp_get_sites') ) { |
---|
2 | /** |
---|
3 | * Return a list of sites for the current network |
---|
4 | * |
---|
5 | * @since 3.5.0 |
---|
6 | * |
---|
7 | * @param array|string $args Optional. Override default arguments. |
---|
8 | * @return array site list and values |
---|
9 | */ |
---|
10 | function wp_get_sites( $args = array() ) { |
---|
11 | // replacement for wp-includes/ms-deprecated.php#get_blog_list |
---|
12 | // see wp-admin/ms-sites.php#352 |
---|
13 | // also wp-includes/ms-functions.php#get_blogs_of_user |
---|
14 | // also wp-includes/post-template.php#wp_list_pages |
---|
15 | global $wpdb; |
---|
16 | |
---|
17 | $defaults = array( |
---|
18 | 'include_public' => '1', // Include blogs marked as public |
---|
19 | 'include_archived' => '0', // Include archived sites |
---|
20 | 'include_mature' => '0', // Included blogs marked as mature |
---|
21 | 'include_spam' => '0', // Include sites marked as "spam" |
---|
22 | 'include_deleted' => '0', // Include deleted sites |
---|
23 | 'domain' => '', // domain is this value |
---|
24 | 'path' => '', // path is like this value |
---|
25 | 'reg_date_since' => '', // sites registered since (accepts pretty much any valid date like tomorrow, today, 5/12/2009, etc.) |
---|
26 | 'reg_date_before' => '', // sites registered before |
---|
27 | 'sort_column' => 'registered',// or last_updated, blogname, site_id. |
---|
28 | 'order' => 'desc', // or asc |
---|
29 | 'limit_results' => '', // return this many results |
---|
30 | 'start' => '', // return results starting with this item |
---|
31 | 'postcount' => false // add postcount info - default to false |
---|
32 | ); |
---|
33 | |
---|
34 | $r = wp_parse_args( $args, $defaults ); |
---|
35 | extract( $r, EXTR_SKIP ); |
---|
36 | |
---|
37 | $query = "SELECT * FROM $wpdb->blogs WHERE site_id = %d "; |
---|
38 | $query_args = Array( $wpdb->siteid ); |
---|
39 | |
---|
40 | foreach( Array( 'public', 'archived', 'mature', 'spam', 'deleted' ) as $param ) { |
---|
41 | $var = "include_{$param}"; |
---|
42 | $var = $$var; |
---|
43 | if ( $var == 1 ) |
---|
44 | $query .= " AND $param = '1' "; |
---|
45 | elseif ( ( $var === 0 ) || ( $var === '0' ) ) |
---|
46 | $query .= " AND $param = '0' "; |
---|
47 | } |
---|
48 | |
---|
49 | if ( !empty( $domain ) ) { |
---|
50 | $query .= " AND ( domain = '%s' ) "; |
---|
51 | $query_args[] = $domain; |
---|
52 | } |
---|
53 | |
---|
54 | if ( !empty( $path ) ) { |
---|
55 | $query .= " AND ( path LIKE '%%%s%%' ) "; |
---|
56 | $query_args[] = $path; |
---|
57 | } |
---|
58 | |
---|
59 | if( !empty( $reg_date_since ) ) { |
---|
60 | $query .= " AND unix_timestamp( b.date_registered ) > '%s' "; |
---|
61 | $query_args[] = strtotime( $reg_date_since ); |
---|
62 | } |
---|
63 | if( !empty( $reg_date_before ) ) { |
---|
64 | $query .= " AND unix_timestamp( b.date_registered ) < '%s' "; |
---|
65 | $query_args[] = strtotime( $reg_date_before ); |
---|
66 | } |
---|
67 | |
---|
68 | $sort_column = strtolower( $sort_column ); |
---|
69 | |
---|
70 | if ( !in_array( $sort_column, Array( 'registered', 'last_updated', 'blog_id', 'domain' ) ) ) |
---|
71 | $sort_column = 'registered'; |
---|
72 | |
---|
73 | $query .= " ORDER BY {$sort_column} "; |
---|
74 | $order = strtoupper( $order ); |
---|
75 | if ( $order !== 'ASC' ) $order = 'DESC'; |
---|
76 | $query .= $order; |
---|
77 | |
---|
78 | if ( !empty( $start ) || !empty( $limit_results ) ) { |
---|
79 | if ( empty( $start ) ) |
---|
80 | $start = 0; |
---|
81 | else |
---|
82 | $start = absint( $start ); |
---|
83 | if ( empty( $limit_results ) ) |
---|
84 | $limit_results = '18446744073709551615'; // 2^64 - 1 -- see docs for LIMIT in http://dev.mysql.com/doc/refman/5.0/en/select.html |
---|
85 | else |
---|
86 | $limit_results = absint( $limit_results ); |
---|
87 | |
---|
88 | if ( empty( $start ) ) { |
---|
89 | if ( !empty( $limit_results ) ) $query .= " LIMIT $limit_results"; |
---|
90 | } else { |
---|
91 | $query .= " LIMIT $start, $limit_results"; |
---|
92 | } |
---|
93 | } |
---|
94 | |
---|
95 | $blogs = $wpdb->get_results( $wpdb->prepare( $query, $query_args ), ARRAY_A ); |
---|
96 | $blog_list = Array(); |
---|
97 | |
---|
98 | foreach ( (array) $blogs as $details ) { |
---|
99 | $blog_list[ $details['blog_id'] ] = $details; |
---|
100 | if ( $postcount ) |
---|
101 | $blog_list[ $details['blog_id'] ]['postcount'] = $wpdb->get_var( "SELECT COUNT(ID) FROM " . $wpdb->get_blog_prefix( $details['blog_id'] ). "posts WHERE post_status='publish' AND post_type='post'" ); |
---|
102 | } |
---|
103 | unset( $blogs ); |
---|
104 | $blogs = $blog_list; |
---|
105 | |
---|
106 | if ( false == is_array( $blogs ) ) |
---|
107 | return array(); |
---|
108 | |
---|
109 | return $blogs; |
---|
110 | } |
---|
111 | } |
---|