WordPress.org

Make WordPress Core

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

File wp-get-sites.3.php, 3.7 KB (added by pbaylies, 19 months 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}