Make WordPress Core

Ticket #14511: wp-get-sites.php

File wp-get-sites.php, 4.5 KB (added by transom, 16 years ago)

Source for wp_get_sites

Line 
1<?php
2/**
3 * Return a list of sites for the current network
4 *
5 * @since 3.1.0
6 *
7 * @param array|string $args Optional. Override default arguments.
8 * @return array site list and values
9 */
10function wp_get_sites($args){
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_id' , // includes only these sites in the results, comma-delimited
19 'exclude_id' , // excludes these sites from the results, comma-delimted
20 'blogname_like' , // domain or path is like this value
21 'ip_like' , // Match IP address
22 'reg_date_since' , // sites registered since (accepts pretty much any valid date like tomorrow, today, 5/12/2009, etc.)
23 'reg_date_before' , // sites registered before
24 'include_user_id' , // only sites owned by these users, comma-delimited
25 'exclude_user_id' , // don't include sites owned by these users, comma-delimited
26 'include_spam' => false, // Include sites marked as "spam"
27 'include_deleted' => false, // Include deleted sites
28 'include_archived' => false, // Include archived sites
29 'include_mature' => false, // Included blogs marked as mature
30 'public_only' => true, // Include only blogs marked as public
31 'sort_column' => 'registered',// or registered, last_updated, blogname, site_id
32 'order' => 'asc', // or desc
33 'limit_results' , // return this many results
34 'start' , // return results starting with this item
35 );
36 function make_email_list_by_user_id($user_ids){
37 $the_users = explode(',',$user_ids);
38 $the_emails = array();
39 foreach( (array) $the_users as $user_id){
40 $the_user = get_userdata($user_id);
41 $the_emails[] = $the_user->user_email;
42 }
43 return $the_emails;
44 }
45
46
47 // array_merge
48 $r = wp_parse_args( $args, $defaults );
49 extract( $r, EXTR_SKIP );
50
51 $query = "SELECT * FROM {$wpdb->blogs}, {$wpdb->registration_log} WHERE site_id = '{$wpdb->siteid}' AND {$wpdb->blogs}.blog_id = {$wpdb->registration_log}.blog_id ";
52
53 if ( isset($include_id) ) {
54 $list = implode("','", explode(',', $include_id));
55 $query .= " AND {$wpdb->blogs}.blog_id IN ('{$list}') ";
56 }
57 if ( isset($exclude_id) ) {
58 $list = implode("','", explode(',', $exclude_id));
59 $query .= " AND {$wpdb->blogs}.blog_id NOT IN ('{$list}') ";
60 }
61 if ( isset($blogname_like) ) {
62 $query .= " AND ( {$wpdb->blogs}.domain LIKE '%".$blogname_like."%' OR {$wpdb->blogs}.path LIKE '%".$blogname_like."%' ) ";
63 }
64 if ( isset($ip_like) ) {
65 $query .= " AND {$wpdb->registration_log}.IP LIKE '%".$ip_like."%' ";
66 }
67 if( isset($reg_date_since) ){
68 $query .= " AND unix_timestamp({$wpdb->registration_log}.date_registered) > '".strtotime($reg_date_since)."' ";
69 }
70 if( isset($reg_date_before) ){
71 $query .= " AND unix_timestamp({$wpdb->registration_log}.date_registered) < '".strtotime($reg_date_before)."' ";
72 }
73 if ( isset($include_user_id) ) {
74 $the_emails = make_email_list_by_user_id($include_user_id);
75 $list = implode("','", $the_emails);
76 $query .= " AND {$wpdb->registration_log}.email IN ('{$list}') ";
77 }
78 if ( isset($exclude_user_id) ) {
79 $the_emails = make_email_list_by_user_id($include_user_id);
80 $list = implode("','", $the_emails);
81 $query .= " AND {$wpdb->registration_log}.email NOT IN ('{$list}') ";
82 }
83 if ( isset($ip_like) ) {
84 $query .= " AND {$wpdb->registration_log}.IP LIKE ('%".$ip_like."%') ";
85 }
86
87 $query .= " AND {$wpdb->blogs}.public = ". (($public_only) ? "'1'" : "'0'");
88 $query .= " AND {$wpdb->blogs}.archived = ". (($include_archived) ? "'1'" : "'0'");
89 $query .= " AND {$wpdb->blogs}.mature = ". (($include_mature) ? "'1'" : "'0'");
90 $query .= " AND {$wpdb->blogs}.spam = ". (($include_spam) ? "'1'" : "'0'");
91 $query .= " AND {$wpdb->blogs}.deleted = ". (($include_deleted) ? "'1'" : "'0'");
92
93 if ( $sort_column == 'site_id' ) {
94 $query .= ' ORDER BY {$wpdb->blogs}.blog_id ';
95 } elseif ( $sort_column == 'lastupdated' ) {
96 $query .= ' ORDER BY last_updated ';
97 } elseif ( $sort_column == 'blogname' ) {
98 $query .= ' ORDER BY domain ';
99 } else {
100 $sort_column = 'registered';
101 $query .= " ORDER BY {$wpdb->blogs}.registered ";
102 }
103
104 $order = ( 'desc' == $order ) ? "DESC" : "ASC";
105 $query .= $order;
106
107 $limit = '';
108 if( isset($limit_results) ){
109 if( isset($start) ){
110 $limit = $start." , ";
111 }
112 $query .= "LIMIT ".$limit.$limit_results;
113 }
114
115 $sql = $wpdb->prepare($query);
116
117 $results = $wpdb->get_results($sql, ARRAY_A);
118
119 return $results;
120}