Make WordPress Core

Ticket #14511: wp-get-sites.3.php

File wp-get-sites.3.php, 3.7 KB (added by pbaylies, 14 years ago)

Standalone version of wp_get_sites() - toss in functions.php to test

Line 
1if( !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}