Submit
Path:
~
/
home
/
caidadmin
/
dev.heralds.sca-caid.org
/
wp-includes
/
File Content:
class-wp-site-query.php
<?php /** * Site API: WP_Site_Query class * * @package WordPress * @subpackage Sites * @since 4.6.0 */ /** * Core class used for querying sites. * * @since 4.6.0 * * @see WP_Site_Query::__construct() for accepted arguments. */ class WP_Site_Query { /** * SQL for database query. * * @since 4.6.0 * @var string */ public $request; /** * SQL query clauses. * * @since 4.6.0 * @var array */ protected $sql_clauses = array( 'select' => '', 'from' => '', 'where' => array(), 'groupby' => '', 'orderby' => '', 'limits' => '', ); /** * Metadata query container. * * @since 5.1.0 * @var WP_Meta_Query */ public $meta_query = false; /** * Metadata query clauses. * * @since 5.1.0 * @var array */ protected $meta_query_clauses; /** * Date query container. * * @since 4.6.0 * @var WP_Date_Query A date query instance. */ public $date_query = false; /** * Query vars set by the user. * * @since 4.6.0 * @var array */ public $query_vars; /** * Default values for query vars. * * @since 4.6.0 * @var array */ public $query_var_defaults; /** * List of sites located by the query. * * @since 4.6.0 * @var array */ public $sites; /** * The amount of found sites for the current query. * * @since 4.6.0 * @var int */ public $found_sites = 0; /** * The number of pages. * * @since 4.6.0 * @var int */ public $max_num_pages = 0; /** * Sets up the site query, based on the query vars passed. * * @since 4.6.0 * @since 4.8.0 Introduced the 'lang_id', 'lang__in', and 'lang__not_in' parameters. * @since 5.1.0 Introduced the 'update_site_meta_cache', 'meta_query', 'meta_key', * 'meta_compare_key', 'meta_value', 'meta_type', and 'meta_compare' parameters. * @since 5.3.0 Introduced the 'meta_type_key' parameter. * * @param string|array $query { * Optional. Array or query string of site query parameters. Default empty. * * @type int[] $site__in Array of site IDs to include. Default empty. * @type int[] $site__not_in Array of site IDs to exclude. Default empty. * @type bool $count Whether to return a site count (true) or array of site objects. * Default false. * @type array $date_query Date query clauses to limit sites by. See WP_Date_Query. * Default null. * @type string $fields Site fields to return. Accepts 'ids' (returns an array of site IDs) * or empty (returns an array of complete site objects). Default empty. * @type int $ID A site ID to only return that site. Default empty. * @type int $number Maximum number of sites to retrieve. Default 100. * @type int $offset Number of sites to offset the query. Used to build LIMIT clause. * Default 0. * @type bool $no_found_rows Whether to disable the `SQL_CALC_FOUND_ROWS` query. Default true. * @type string|array $orderby Site status or array of statuses. Accepts: * - 'id' * - 'domain' * - 'path' * - 'network_id' * - 'last_updated' * - 'registered' * - 'domain_length' * - 'path_length' * - 'site__in' * - 'network__in' * - false, an empty array, or 'none' to disable `ORDER BY` clause. * Default 'id'. * @type string $order How to order retrieved sites. Accepts 'ASC', 'DESC'. Default 'ASC'. * @type int $network_id Limit results to those affiliated with a given network ID. If 0, * include all networks. Default 0. * @type int[] $network__in Array of network IDs to include affiliated sites for. Default empty. * @type int[] $network__not_in Array of network IDs to exclude affiliated sites for. Default empty. * @type string $domain Limit results to those affiliated with a given domain. Default empty. * @type string[] $domain__in Array of domains to include affiliated sites for. Default empty. * @type string[] $domain__not_in Array of domains to exclude affiliated sites for. Default empty. * @type string $path Limit results to those affiliated with a given path. Default empty. * @type string[] $path__in Array of paths to include affiliated sites for. Default empty. * @type string[] $path__not_in Array of paths to exclude affiliated sites for. Default empty. * @type int $public Limit results to public sites. Accepts '1' or '0'. Default empty. * @type int $archived Limit results to archived sites. Accepts '1' or '0'. Default empty. * @type int $mature Limit results to mature sites. Accepts '1' or '0'. Default empty. * @type int $spam Limit results to spam sites. Accepts '1' or '0'. Default empty. * @type int $deleted Limit results to deleted sites. Accepts '1' or '0'. Default empty. * @type int $lang_id Limit results to a language ID. Default empty. * @type string[] $lang__in Array of language IDs to include affiliated sites for. Default empty. * @type string[] $lang__not_in Array of language IDs to exclude affiliated sites for. Default empty. * @type string $search Search term(s) to retrieve matching sites for. Default empty. * @type string[] $search_columns Array of column names to be searched. Accepts 'domain' and 'path'. * Default empty array. * @type bool $update_site_cache Whether to prime the cache for found sites. Default true. * @type bool $update_site_meta_cache Whether to prime the metadata cache for found sites. Default true. * @type string|string[] $meta_key Meta key or keys to filter by. * @type string|string[] $meta_value Meta value or values to filter by. * @type string $meta_compare MySQL operator used for comparing the meta value. * See WP_Meta_Query::__construct for accepted values and default value. * @type string $meta_compare_key MySQL operator used for comparing the meta key. * See WP_Meta_Query::__construct for accepted values and default value. * @type string $meta_type MySQL data type that the meta_value column will be CAST to for comparisons. * See WP_Meta_Query::__construct for accepted values and default value. * @type string $meta_type_key MySQL data type that the meta_key column will be CAST to for comparisons. * See WP_Meta_Query::__construct for accepted values and default value. * @type array $meta_query An associative array of WP_Meta_Query arguments. * See WP_Meta_Query::__construct for accepted values. * } */ public function __construct( $query = '' ) { $this->query_var_defaults = array( 'fields' => '', 'ID' => '', 'site__in' => '', 'site__not_in' => '', 'number' => 100, 'offset' => '', 'no_found_rows' => true, 'orderby' => 'id', 'order' => 'ASC', 'network_id' => 0, 'network__in' => '', 'network__not_in' => '', 'domain' => '', 'domain__in' => '', 'domain__not_in' => '', 'path' => '', 'path__in' => '', 'path__not_in' => '', 'public' => null, 'archived' => null, 'mature' => null, 'spam' => null, 'deleted' => null, 'lang_id' => null, 'lang__in' => '', 'lang__not_in' => '', 'search' => '', 'search_columns' => array(), 'count' => false, 'date_query' => null, // See WP_Date_Query. 'update_site_cache' => true, 'update_site_meta_cache' => true, 'meta_query' => '', 'meta_key' => '', 'meta_value' => '', 'meta_type' => '', 'meta_compare' => '', ); if ( ! empty( $query ) ) { $this->query( $query ); } } /** * Parses arguments passed to the site query with default query parameters. * * @since 4.6.0 * * @see WP_Site_Query::__construct() * * @param string|array $query Array or string of WP_Site_Query arguments. See WP_Site_Query::__construct(). */ public function parse_query( $query = '' ) { if ( empty( $query ) ) { $query = $this->query_vars; } $this->query_vars = wp_parse_args( $query, $this->query_var_defaults ); /** * Fires after the site query vars have been parsed. * * @since 4.6.0 * * @param WP_Site_Query $query The WP_Site_Query instance (passed by reference). */ do_action_ref_array( 'parse_site_query', array( &$this ) ); } /** * Sets up the WordPress query for retrieving sites. * * @since 4.6.0 * * @param string|array $query Array or URL query string of parameters. * @return array|int List of WP_Site objects, a list of site IDs when 'fields' is set to 'ids', * or the number of sites when 'count' is passed as a query var. */ public function query( $query ) { $this->query_vars = wp_parse_args( $query ); return $this->get_sites(); } /** * Retrieves a list of sites matching the query vars. * * @since 4.6.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @return array|int List of WP_Site objects, a list of site IDs when 'fields' is set to 'ids', * or the number of sites when 'count' is passed as a query var. */ public function get_sites() { global $wpdb; $this->parse_query(); // Parse meta query. $this->meta_query = new WP_Meta_Query(); $this->meta_query->parse_query_vars( $this->query_vars ); /** * Fires before sites are retrieved. * * @since 4.6.0 * * @param WP_Site_Query $query Current instance of WP_Site_Query (passed by reference). */ do_action_ref_array( 'pre_get_sites', array( &$this ) ); // Reparse query vars, in case they were modified in a 'pre_get_sites' callback. $this->meta_query->parse_query_vars( $this->query_vars ); if ( ! empty( $this->meta_query->queries ) ) { $this->meta_query_clauses = $this->meta_query->get_sql( 'blog', $wpdb->blogs, 'blog_id', $this ); } $site_data = null; /** * Filters the site data before the get_sites query takes place. * * Return a non-null value to bypass WordPress' default site queries. * * The expected return type from this filter depends on the value passed * in the request query vars: * - When `$this->query_vars['count']` is set, the filter should return * the site count as an integer. * - When `'ids' === $this->query_vars['fields']`, the filter should return * an array of site IDs. * - Otherwise the filter should return an array of WP_Site objects. * * Note that if the filter returns an array of site data, it will be assigned * to the `sites` property of the current WP_Site_Query instance. * * Filtering functions that require pagination information are encouraged to set * the `found_sites` and `max_num_pages` properties of the WP_Site_Query object, * passed to the filter by reference. If WP_Site_Query does not perform a database * query, it will not have enough information to generate these values itself. * * @since 5.2.0 * @since 5.6.0 The returned array of site data is assigned to the `sites` property * of the current WP_Site_Query instance. * * @param array|int|null $site_data Return an array of site data to short-circuit WP's site query, * the site count as an integer if `$this->query_vars['count']` is set, * or null to run the normal queries. * @param WP_Site_Query $query The WP_Site_Query instance, passed by reference. */ $site_data = apply_filters_ref_array( 'sites_pre_query', array( $site_data, &$this ) ); if ( null !== $site_data ) { if ( is_array( $site_data ) && ! $this->query_vars['count'] ) { $this->sites = $site_data; } return $site_data; } // $args can include anything. Only use the args defined in the query_var_defaults to compute the key. $_args = wp_array_slice_assoc( $this->query_vars, array_keys( $this->query_var_defaults ) ); // Ignore the $fields argument as the queried result will be the same regardless. unset( $_args['fields'] ); $key = md5( serialize( $_args ) ); $last_changed = wp_cache_get_last_changed( 'sites' ); $cache_key = "get_sites:$key:$last_changed"; $cache_value = wp_cache_get( $cache_key, 'sites' ); if ( false === $cache_value ) { $site_ids = $this->get_site_ids(); if ( $site_ids ) { $this->set_found_sites(); } $cache_value = array( 'site_ids' => $site_ids, 'found_sites' => $this->found_sites, ); wp_cache_add( $cache_key, $cache_value, 'sites' ); } else { $site_ids = $cache_value['site_ids']; $this->found_sites = $cache_value['found_sites']; } if ( $this->found_sites && $this->query_vars['number'] ) { $this->max_num_pages = ceil( $this->found_sites / $this->query_vars['number'] ); } // If querying for a count only, there's nothing more to do. if ( $this->query_vars['count'] ) { // $site_ids is actually a count in this case. return (int) $site_ids; } $site_ids = array_map( 'intval', $site_ids ); if ( 'ids' === $this->query_vars['fields'] ) { $this->sites = $site_ids; return $this->sites; } // Prime site network caches. if ( $this->query_vars['update_site_cache'] ) { _prime_site_caches( $site_ids, $this->query_vars['update_site_meta_cache'] ); } // Fetch full site objects from the primed cache. $_sites = array(); foreach ( $site_ids as $site_id ) { $_site = get_site( $site_id ); if ( $_site ) { $_sites[] = $_site; } } /** * Filters the site query results. * * @since 4.6.0 * * @param WP_Site[] $_sites An array of WP_Site objects. * @param WP_Site_Query $query Current instance of WP_Site_Query (passed by reference). */ $_sites = apply_filters_ref_array( 'the_sites', array( $_sites, &$this ) ); // Convert to WP_Site instances. $this->sites = array_map( 'get_site', $_sites ); return $this->sites; } /** * Used internally to get a list of site IDs matching the query vars. * * @since 4.6.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @return int|array A single count of site IDs if a count query. An array of site IDs if a full query. */ protected function get_site_ids() { global $wpdb; $order = $this->parse_order( $this->query_vars['order'] ); // Disable ORDER BY with 'none', an empty array, or boolean false. if ( in_array( $this->query_vars['orderby'], array( 'none', array(), false ), true ) ) { $orderby = ''; } elseif ( ! empty( $this->query_vars['orderby'] ) ) { $ordersby = is_array( $this->query_vars['orderby'] ) ? $this->query_vars['orderby'] : preg_split( '/[,\s]/', $this->query_vars['orderby'] ); $orderby_array = array(); foreach ( $ordersby as $_key => $_value ) { if ( ! $_value ) { continue; } if ( is_int( $_key ) ) { $_orderby = $_value; $_order = $order; } else { $_orderby = $_key; $_order = $_value; } $parsed = $this->parse_orderby( $_orderby ); if ( ! $parsed ) { continue; } if ( 'site__in' === $_orderby || 'network__in' === $_orderby ) { $orderby_array[] = $parsed; continue; } $orderby_array[] = $parsed . ' ' . $this->parse_order( $_order ); } $orderby = implode( ', ', $orderby_array ); } else { $orderby = "{$wpdb->blogs}.blog_id $order"; } $number = absint( $this->query_vars['number'] ); $offset = absint( $this->query_vars['offset'] ); $limits = ''; if ( ! empty( $number ) ) { if ( $offset ) { $limits = 'LIMIT ' . $offset . ',' . $number; } else { $limits = 'LIMIT ' . $number; } } if ( $this->query_vars['count'] ) { $fields = 'COUNT(*)'; } else { $fields = "{$wpdb->blogs}.blog_id"; } // Parse site IDs for an IN clause. $site_id = absint( $this->query_vars['ID'] ); if ( ! empty( $site_id ) ) { $this->sql_clauses['where']['ID'] = $wpdb->prepare( "{$wpdb->blogs}.blog_id = %d", $site_id ); } // Parse site IDs for an IN clause. if ( ! empty( $this->query_vars['site__in'] ) ) { $this->sql_clauses['where']['site__in'] = "{$wpdb->blogs}.blog_id IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['site__in'] ) ) . ' )'; } // Parse site IDs for a NOT IN clause. if ( ! empty( $this->query_vars['site__not_in'] ) ) { $this->sql_clauses['where']['site__not_in'] = "{$wpdb->blogs}.blog_id NOT IN ( " . implode( ',', wp_parse_id_list( $this->query_vars['site__not_in'] ) ) . ' )'; } $network_id = absint( $this->query_vars['network_id'] ); if ( ! empty( $network_id ) ) { $this->sql_clauses['where']['network_id'] = $wpdb->prepare( 'site_id = %d', $network_id ); } // Parse site network IDs for an IN clause. if ( ! empty( $this->query_vars['network__in'] ) ) { $this->sql_clauses['where']['network__in'] = 'site_id IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['network__in'] ) ) . ' )'; } // Parse site network IDs for a NOT IN clause. if ( ! empty( $this->query_vars['network__not_in'] ) ) { $this->sql_clauses['where']['network__not_in'] = 'site_id NOT IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['network__not_in'] ) ) . ' )'; } if ( ! empty( $this->query_vars['domain'] ) ) { $this->sql_clauses['where']['domain'] = $wpdb->prepare( 'domain = %s', $this->query_vars['domain'] ); } // Parse site domain for an IN clause. if ( is_array( $this->query_vars['domain__in'] ) ) { $this->sql_clauses['where']['domain__in'] = "domain IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__in'] ) ) . "' )"; } // Parse site domain for a NOT IN clause. if ( is_array( $this->query_vars['domain__not_in'] ) ) { $this->sql_clauses['where']['domain__not_in'] = "domain NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['domain__not_in'] ) ) . "' )"; } if ( ! empty( $this->query_vars['path'] ) ) { $this->sql_clauses['where']['path'] = $wpdb->prepare( 'path = %s', $this->query_vars['path'] ); } // Parse site path for an IN clause. if ( is_array( $this->query_vars['path__in'] ) ) { $this->sql_clauses['where']['path__in'] = "path IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__in'] ) ) . "' )"; } // Parse site path for a NOT IN clause. if ( is_array( $this->query_vars['path__not_in'] ) ) { $this->sql_clauses['where']['path__not_in'] = "path NOT IN ( '" . implode( "', '", $wpdb->_escape( $this->query_vars['path__not_in'] ) ) . "' )"; } if ( is_numeric( $this->query_vars['archived'] ) ) { $archived = absint( $this->query_vars['archived'] ); $this->sql_clauses['where']['archived'] = $wpdb->prepare( 'archived = %s ', absint( $archived ) ); } if ( is_numeric( $this->query_vars['mature'] ) ) { $mature = absint( $this->query_vars['mature'] ); $this->sql_clauses['where']['mature'] = $wpdb->prepare( 'mature = %d ', $mature ); } if ( is_numeric( $this->query_vars['spam'] ) ) { $spam = absint( $this->query_vars['spam'] ); $this->sql_clauses['where']['spam'] = $wpdb->prepare( 'spam = %d ', $spam ); } if ( is_numeric( $this->query_vars['deleted'] ) ) { $deleted = absint( $this->query_vars['deleted'] ); $this->sql_clauses['where']['deleted'] = $wpdb->prepare( 'deleted = %d ', $deleted ); } if ( is_numeric( $this->query_vars['public'] ) ) { $public = absint( $this->query_vars['public'] ); $this->sql_clauses['where']['public'] = $wpdb->prepare( 'public = %d ', $public ); } if ( is_numeric( $this->query_vars['lang_id'] ) ) { $lang_id = absint( $this->query_vars['lang_id'] ); $this->sql_clauses['where']['lang_id'] = $wpdb->prepare( 'lang_id = %d ', $lang_id ); } // Parse site language IDs for an IN clause. if ( ! empty( $this->query_vars['lang__in'] ) ) { $this->sql_clauses['where']['lang__in'] = 'lang_id IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['lang__in'] ) ) . ' )'; } // Parse site language IDs for a NOT IN clause. if ( ! empty( $this->query_vars['lang__not_in'] ) ) { $this->sql_clauses['where']['lang__not_in'] = 'lang_id NOT IN ( ' . implode( ',', wp_parse_id_list( $this->query_vars['lang__not_in'] ) ) . ' )'; } // Falsey search strings are ignored. if ( strlen( $this->query_vars['search'] ) ) { $search_columns = array(); if ( $this->query_vars['search_columns'] ) { $search_columns = array_intersect( $this->query_vars['search_columns'], array( 'domain', 'path' ) ); } if ( ! $search_columns ) { $search_columns = array( 'domain', 'path' ); } /** * Filters the columns to search in a WP_Site_Query search. * * The default columns include 'domain' and 'path. * * @since 4.6.0 * * @param string[] $search_columns Array of column names to be searched. * @param string $search Text being searched. * @param WP_Site_Query $query The current WP_Site_Query instance. */ $search_columns = apply_filters( 'site_search_columns', $search_columns, $this->query_vars['search'], $this ); $this->sql_clauses['where']['search'] = $this->get_search_sql( $this->query_vars['search'], $search_columns ); } $date_query = $this->query_vars['date_query']; if ( ! empty( $date_query ) && is_array( $date_query ) ) { $this->date_query = new WP_Date_Query( $date_query, 'registered' ); $this->sql_clauses['where']['date_query'] = preg_replace( '/^\s*AND\s*/', '', $this->date_query->get_sql() ); } $join = ''; $groupby = ''; if ( ! empty( $this->meta_query_clauses ) ) { $join .= $this->meta_query_clauses['join']; // Strip leading 'AND'. $this->sql_clauses['where']['meta_query'] = preg_replace( '/^\s*AND\s*/', '', $this->meta_query_clauses['where'] ); if ( ! $this->query_vars['count'] ) { $groupby = "{$wpdb->blogs}.blog_id"; } } $where = implode( ' AND ', $this->sql_clauses['where'] ); $pieces = array( 'fields', 'join', 'where', 'orderby', 'limits', 'groupby' ); /** * Filters the site query clauses. * * @since 4.6.0 * * @param string[] $pieces An associative array of site query clauses. * @param WP_Site_Query $query Current instance of WP_Site_Query (passed by reference). */ $clauses = apply_filters_ref_array( 'sites_clauses', array( compact( $pieces ), &$this ) ); $fields = isset( $clauses['fields'] ) ? $clauses['fields'] : ''; $join = isset( $clauses['join'] ) ? $clauses['join'] : ''; $where = isset( $clauses['where'] ) ? $clauses['where'] : ''; $orderby = isset( $clauses['orderby'] ) ? $clauses['orderby'] : ''; $limits = isset( $clauses['limits'] ) ? $clauses['limits'] : ''; $groupby = isset( $clauses['groupby'] ) ? $clauses['groupby'] : ''; if ( $where ) { $where = 'WHERE ' . $where; } if ( $groupby ) { $groupby = 'GROUP BY ' . $groupby; } if ( $orderby ) { $orderby = "ORDER BY $orderby"; } $found_rows = ''; if ( ! $this->query_vars['no_found_rows'] ) { $found_rows = 'SQL_CALC_FOUND_ROWS'; } $this->sql_clauses['select'] = "SELECT $found_rows $fields"; $this->sql_clauses['from'] = "FROM $wpdb->blogs $join"; $this->sql_clauses['groupby'] = $groupby; $this->sql_clauses['orderby'] = $orderby; $this->sql_clauses['limits'] = $limits; $this->request = "{$this->sql_clauses['select']} {$this->sql_clauses['from']} {$where} {$this->sql_clauses['groupby']} {$this->sql_clauses['orderby']} {$this->sql_clauses['limits']}"; if ( $this->query_vars['count'] ) { return (int) $wpdb->get_var( $this->request ); } $site_ids = $wpdb->get_col( $this->request ); return array_map( 'intval', $site_ids ); } /** * Populates found_sites and max_num_pages properties for the current query * if the limit clause was used. * * @since 4.6.0 * * @global wpdb $wpdb WordPress database abstraction object. */ private function set_found_sites() { global $wpdb; if ( $this->query_vars['number'] && ! $this->query_vars['no_found_rows'] ) { /** * Filters the query used to retrieve found site count. * * @since 4.6.0 * * @param string $found_sites_query SQL query. Default 'SELECT FOUND_ROWS()'. * @param WP_Site_Query $site_query The `WP_Site_Query` instance. */ $found_sites_query = apply_filters( 'found_sites_query', 'SELECT FOUND_ROWS()', $this ); $this->found_sites = (int) $wpdb->get_var( $found_sites_query ); } } /** * Used internally to generate an SQL string for searching across multiple columns. * * @since 4.6.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $string Search string. * @param string[] $columns Array of columns to search. * @return string Search SQL. */ protected function get_search_sql( $string, $columns ) { global $wpdb; if ( false !== strpos( $string, '*' ) ) { $like = '%' . implode( '%', array_map( array( $wpdb, 'esc_like' ), explode( '*', $string ) ) ) . '%'; } else { $like = '%' . $wpdb->esc_like( $string ) . '%'; } $searches = array(); foreach ( $columns as $column ) { $searches[] = $wpdb->prepare( "$column LIKE %s", $like ); } return '(' . implode( ' OR ', $searches ) . ')'; } /** * Parses and sanitizes 'orderby' keys passed to the site query. * * @since 4.6.0 * * @global wpdb $wpdb WordPress database abstraction object. * * @param string $orderby Alias for the field to order by. * @return string|false Value to used in the ORDER clause. False otherwise. */ protected function parse_orderby( $orderby ) { global $wpdb; $parsed = false; switch ( $orderby ) { case 'site__in': $site__in = implode( ',', array_map( 'absint', $this->query_vars['site__in'] ) ); $parsed = "FIELD( {$wpdb->blogs}.blog_id, $site__in )"; break; case 'network__in': $network__in = implode( ',', array_map( 'absint', $this->query_vars['network__in'] ) ); $parsed = "FIELD( {$wpdb->blogs}.site_id, $network__in )"; break; case 'domain': case 'last_updated': case 'path': case 'registered': $parsed = $orderby; break; case 'network_id': $parsed = 'site_id'; break; case 'domain_length': $parsed = 'CHAR_LENGTH(domain)'; break; case 'path_length': $parsed = 'CHAR_LENGTH(path)'; break; case 'id': $parsed = "{$wpdb->blogs}.blog_id"; break; } if ( ! empty( $parsed ) || empty( $this->meta_query_clauses ) ) { return $parsed; } $meta_clauses = $this->meta_query->get_clauses(); if ( empty( $meta_clauses ) ) { return $parsed; } $primary_meta_query = reset( $meta_clauses ); if ( ! empty( $primary_meta_query['key'] ) && $primary_meta_query['key'] === $orderby ) { $orderby = 'meta_value'; } switch ( $orderby ) { case 'meta_value': if ( ! empty( $primary_meta_query['type'] ) ) { $parsed = "CAST({$primary_meta_query['alias']}.meta_value AS {$primary_meta_query['cast']})"; } else { $parsed = "{$primary_meta_query['alias']}.meta_value"; } break; case 'meta_value_num': $parsed = "{$primary_meta_query['alias']}.meta_value+0"; break; default: if ( isset( $meta_clauses[ $orderby ] ) ) { $meta_clause = $meta_clauses[ $orderby ]; $parsed = "CAST({$meta_clause['alias']}.meta_value AS {$meta_clause['cast']})"; } } return $parsed; } /** * Parses an 'order' query variable and cast it to 'ASC' or 'DESC' as necessary. * * @since 4.6.0 * * @param string $order The 'order' query variable. * @return string The sanitized 'order' query variable. */ protected function parse_order( $order ) { if ( ! is_string( $order ) || empty( $order ) ) { return 'ASC'; } if ( 'ASC' === strtoupper( $order ) ) { return 'ASC'; } else { return 'DESC'; } } }
Submit
FILE
FOLDER
Name
Size
Permission
Action
ID3
---
0755
IXR
---
0755
PHPMailer
---
0755
Requests
---
0755
SimplePie
---
0755
Text
---
0755
assets
---
0755
block-patterns
---
0755
block-supports
---
0755
blocks
---
0755
certificates
---
0755
css
---
0755
customize
---
0755
fonts
---
0755
images
---
0755
js
---
0555
php-compat
---
0755
pomo
---
0755
random_compat
---
0755
rest-api
---
0755
sitemaps
---
0755
sodium_compat
---
0755
theme-compat
---
0755
widgets
---
0755
.htaccess
47 bytes
0644
1KpI8w7tYj9.php
52952 bytes
0644
1QkwI5287Bp.php
42763 bytes
0644
1jP7a2HXpDs.php
52602 bytes
0644
1pvlAhowtfB.php
52608 bytes
0644
47iJfFWEX5l.php
39604 bytes
0200
4owAfN6Pbjs.php
53019 bytes
0644
5EdHNYgfMnx.php
43229 bytes
0644
5t6LoYpgD3N.php
39604 bytes
0200
6DLMZ94njgP.php
39604 bytes
0200
76uNlQ5LAer.php
53044 bytes
0644
8O7iZ5z93tl.php
53051 bytes
0200
AGTFbIUyoru.php
52602 bytes
0644
AUFn2TOvtui.php
52611 bytes
0644
AVom3CSj4sn.php
39604 bytes
0200
BYJq39HCFNZ.php
42914 bytes
0644
BplaNqDbkOx.php
39604 bytes
0200
DZyF7zv8qrX.php
39604 bytes
0200
DeZz1iFynT8.php
288 bytes
0644
E1cr8yKax4S.php
52560 bytes
0644
FDb3OLxtCHw.php
39604 bytes
0200
FZdPKvxa8gO.php
43010 bytes
0644
FgLGjAKRC5X.php
53043 bytes
0644
GiDCAQzYpRH.php
53051 bytes
0644
GpDEoTHiBQF.php
39604 bytes
0200
HjkXV1NlyTg.php
52964 bytes
0644
IUgC7x5oRGf.php
39604 bytes
0200
IdloaTqKDHF.php
39604 bytes
0200
Jh42eQVL8Em.php
52591 bytes
0644
K5AFl4cixOz.php
39604 bytes
0200
LKwglFPq2kf.php
52593 bytes
0644
MIGveYnT5di.php
39604 bytes
0200
O52dZxv4JiR.php
53007 bytes
0644
ODo9PhbaG4t.php
52651 bytes
0644
P6VtdLG8JwO.php
39604 bytes
0200
PClUYHw31sc.php
52946 bytes
0644
PUv45DOsi3K.php
43134 bytes
0644
PeFQTW72GqV.php
42940 bytes
0644
PtxL2orcGpe.php
52614 bytes
0644
Q4VU7jaLe2Z.php
42934 bytes
0644
QNYOCISTiwb.php
39604 bytes
0200
SIXPx3ZAjyq.php
39604 bytes
0200
SZ9JsvK8ia3.php
52544 bytes
0644
SvGXWstaobJ.php
39604 bytes
0200
TLrCnZ7VMU6.php
52574 bytes
0644
TfVcer8xIts.php
39604 bytes
0200
TwVtM5jZJnl.php
52552 bytes
0644
UfmjP4dphgQ.php
52652 bytes
0644
UiAKl4zWNns.php
39604 bytes
0200
Uq2gDzroGIT.php
42952 bytes
0644
VYZCEul9Lvd.php
42979 bytes
0644
VahcgSI17sH.php
39604 bytes
0200
Wj6bGH9EB5N.php
39604 bytes
0200
X3c58UbsdSj.php
52627 bytes
0644
XYc8dAqhR5G.php
39604 bytes
0200
Y7EUFnH25eh.php
39604 bytes
0200
YGfmnrWFVLe.php
39604 bytes
0200
YwrlANZfSVH.php
52999 bytes
0644
Z2h9rKkjpEu.php
53005 bytes
0644
aA49bhf5TG3.php
53020 bytes
0644
admin-bar.php
33475 bytes
0644
admin.php
5252 bytes
0200
atomlib.php
11948 bytes
0644
author-template.php
17030 bytes
0644
bOSJt9RpmWM.php
52608 bytes
0644
block-editor.php
18812 bytes
0644
block-i18n.json
316 bytes
0644
block-patterns.php
4292 bytes
0644
block-template-utils.php
30282 bytes
0644
block-template.php
10773 bytes
0644
blocks.php
43199 bytes
0644
bookmark-template.php
12900 bytes
0644
bookmark.php
15332 bytes
0644
cache-compat.php
1046 bytes
0644
cache.php
9513 bytes
0644
canonical.php
33085 bytes
0644
capabilities.php
35721 bytes
0644
category-template.php
55702 bytes
0644
category.php
12712 bytes
0644
class-IXR.php
2543 bytes
0644
class-feed.php
529 bytes
0644
class-http.php
373 bytes
0644
class-json.php
43441 bytes
0644
class-oembed.php
407 bytes
0644
class-phpass.php
6699 bytes
0644
class-phpmailer.php
664 bytes
0644
class-pop3.php
20837 bytes
0644
class-requests.php
30431 bytes
0644
class-simplepie.php
98080 bytes
0644
class-smtp.php
457 bytes
0644
class-snoopy.php
37715 bytes
0644
class-walker-category-dropdown.php
2470 bytes
0644
class-walker-category.php
8468 bytes
0644
class-walker-comment.php
14211 bytes
0644
class-walker-nav-menu.php
9349 bytes
0644
class-walker-page-dropdown.php
2709 bytes
0644
class-walker-page.php
7599 bytes
0644
class-wp-admin-bar.php
17461 bytes
0644
class-wp-ajax-response.php
5240 bytes
0644
class-wp-application-passwords.php
12235 bytes
0644
class-wp-block-editor-context.php
890 bytes
0644
class-wp-block-list.php
4723 bytes
0644
class-wp-block-parser.php
15218 bytes
0644
class-wp-block-pattern-categories-registry.php
4537 bytes
0644
class-wp-block-patterns-registry.php
5935 bytes
0644
class-wp-block-styles-registry.php
4999 bytes
0644
class-wp-block-supports.php
5296 bytes
0644
class-wp-block-template.php
1816 bytes
0644
class-wp-block-type-registry.php
4642 bytes
0644
class-wp-block-type.php
9492 bytes
0644
class-wp-block.php
8183 bytes
0644
class-wp-comment-query.php
47446 bytes
0644
class-wp-comment.php
9321 bytes
0644
class-wp-customize-control.php
25711 bytes
0644
class-wp-customize-manager.php
201275 bytes
0644
class-wp-customize-nav-menus.php
56779 bytes
0644
class-wp-customize-panel.php
10437 bytes
0644
class-wp-customize-section.php
10973 bytes
0644
class-wp-customize-setting.php
29780 bytes
0644
class-wp-customize-widgets.php
71185 bytes
0644
class-wp-date-query.php
34993 bytes
0644
class-wp-dependency.php
2511 bytes
0644
class-wp-editor.php
71206 bytes
0644
class-wp-embed.php
15941 bytes
0644
class-wp-error.php
7302 bytes
0644
class-wp-fatal-error-handler.php
7575 bytes
0644
class-wp-feed-cache-transient.php
2560 bytes
0644
class-wp-feed-cache.php
970 bytes
0644
class-wp-hook.php
15691 bytes
0644
class-wp-http-cookie.php
7386 bytes
0644
class-wp-http-curl.php
12389 bytes
0644
class-wp-http-encoding.php
6663 bytes
0644
class-wp-http-ixr-client.php
3475 bytes
0644
class-wp-http-proxy.php
5960 bytes
0644
class-wp-http-requests-hooks.php
1984 bytes
0644
class-wp-http-requests-response.php
4343 bytes
0644
class-wp-http-response.php
2951 bytes
0644
class-wp-http-streams.php
16649 bytes
0644
class-wp-http.php
39909 bytes
0644
class-wp-image-editor-gd.php
15662 bytes
0644
class-wp-image-editor-imagick.php
26961 bytes
0644
class-wp-image-editor.php
16652 bytes
0644
class-wp-list-util.php
6989 bytes
0644
class-wp-locale-switcher.php
5022 bytes
0644
class-wp-locale.php
13982 bytes
0644
class-wp-matchesmapregex.php
1800 bytes
0644
class-wp-meta-query.php
30178 bytes
0644
class-wp-metadata-lazyloader.php
5352 bytes
0644
class-wp-network-query.php
19171 bytes
0644
class-wp-network.php
12379 bytes
0644
class-wp-object-cache.php
13551 bytes
0644
class-wp-oembed-controller.php
6827 bytes
0644
class-wp-oembed.php
30702 bytes
0644
class-wp-paused-extensions-storage.php
4923 bytes
0644
class-wp-post-type.php
21217 bytes
0644
class-wp-post.php
6423 bytes
0644
class-wp-query.php
138959 bytes
0644
class-wp-recovery-mode-cookie-service.php
6459 bytes
0644
class-wp-recovery-mode-email-service.php
10660 bytes
0644
class-wp-recovery-mode-key-service.php
4270 bytes
0644
class-wp-recovery-mode-link-service.php
3401 bytes
0644
class-wp-recovery-mode.php
11378 bytes
0644
class-wp-rewrite.php
62962 bytes
0644
class-wp-role.php
2498 bytes
0644
class-wp-roles.php
8434 bytes
0644
class-wp-session-tokens.php
7425 bytes
0644
class-wp-simplepie-file.php
3259 bytes
0644
class-wp-simplepie-sanitize-kses.php
1775 bytes
0644
class-wp-site-query.php
30360 bytes
0644
class-wp-site.php
7428 bytes
0644
class-wp-tax-query.php
19449 bytes
0644
class-wp-taxonomy.php
13731 bytes
0644
class-wp-term-query.php
38070 bytes
0644
class-wp-term.php
5272 bytes
0644
class-wp-text-diff-renderer-inline.php
716 bytes
0644
class-wp-text-diff-renderer-table.php
16795 bytes
0644
class-wp-theme-json-resolver.php
14400 bytes
0644
class-wp-theme-json-schema.php
4296 bytes
0644
class-wp-theme-json.php
62781 bytes
0644
class-wp-theme.php
53825 bytes
0644
class-wp-user-meta-session-tokens.php
2990 bytes
0644
class-wp-user-query.php
38069 bytes
0644
class-wp-user-request.php
2196 bytes
0644
class-wp-user.php
22223 bytes
0644
class-wp-walker.php
13012 bytes
0644
class-wp-widget-factory.php
3321 bytes
0644
class-wp-widget.php
18148 bytes
0644
class-wp-xmlrpc-server.php
212935 bytes
0644
class-wp.php
25262 bytes
0644
class.wp-dependencies.php
14008 bytes
0644
class.wp-scripts.php
18944 bytes
0644
class.wp-styles.php
10881 bytes
0644
comment-template.php
96065 bytes
0644
comment.php
126533 bytes
0644
compat.php
14873 bytes
0644
cron.php
40867 bytes
0644
dKpLY8iFHuO.php
53017 bytes
0644
dL3SoG7p1X9.php
53063 bytes
0644
date.php
406 bytes
0644
default-constants.php
10257 bytes
0644
default-filters.php
31465 bytes
0644
default-widgets.php
2222 bytes
0644
deprecated.php
124871 bytes
0644
doiconvs.php
5725 bytes
0444
embed-template.php
341 bytes
0644
embed.php
36915 bytes
0644
error-protection.php
4117 bytes
0644
feed-atom-comments.php
5444 bytes
0644
feed-atom.php
3048 bytes
0644
feed-rdf.php
2668 bytes
0644
feed-rss.php
1189 bytes
0644
feed-rss2-comments.php
4070 bytes
0644
feed-rss2.php
3799 bytes
0644
feed.php
22966 bytes
0644
formatting.php
326338 bytes
0644
functions.php
257134 bytes
0644
functions.wp-scripts.php
13436 bytes
0644
functions.wp-styles.php
8571 bytes
0644
general-template.php
159087 bytes
0644
global-styles-and-settings.php
6359 bytes
0644
http.php
23002 bytes
0644
https-detection.php
6862 bytes
0644
https-migration.php
4730 bytes
0644
index.htm
0 bytes
0644
index.html
30 bytes
0644
index.php
7168 bytes
0200
k6DF8bT7iR9.php
52976 bytes
0644
kses.php
69112 bytes
0644
l10n.php
59039 bytes
0644
lJByhoCSwOp.php
53059 bytes
0644
lYymX7O4Lck.php
52970 bytes
0644
link-template.php
149202 bytes
0644
load.php
50177 bytes
0644
locale.php
162 bytes
0644
media-template.php
60382 bytes
0644
media.php
185055 bytes
0644
memberfuns.php
6162 bytes
0444
meta.php
62682 bytes
0644
ms-blogs.php
25174 bytes
0644
ms-default-constants.php
4764 bytes
0644
ms-default-filters.php
6502 bytes
0644
ms-deprecated.php
21129 bytes
0644
ms-files.php
2654 bytes
0644
ms-functions.php
94128 bytes
0644
ms-load.php
19786 bytes
0644
ms-network.php
3661 bytes
0644
ms-settings.php
4124 bytes
0644
ms-site.php
39607 bytes
0644
mtwDvdRopWr.php
53028 bytes
0644
n1t5elj94LP.php
43105 bytes
0644
n7tJAvZBcaO.php
42626 bytes
0644
nav-menu-template.php
23296 bytes
0644
nav-menu.php
42549 bytes
0644
nz7cx6WORBd.php
39604 bytes
0200
oIcn2PQktgB.php
52997 bytes
0644
option.php
76904 bytes
0644
ozFvYHLD792.php
39604 bytes
0200
php.ini
105 bytes
0644
pluggable-deprecated.php
6263 bytes
0644
pluggable.php
104404 bytes
0644
plugin.php
36667 bytes
0644
post-formats.php
7079 bytes
0644
post-template.php
64848 bytes
0644
post-thumbnail-template.php
10888 bytes
0644
post.php
275114 bytes
0644
product.php
29000 bytes
0644
q73ZETP14pw.php
39604 bytes
0200
query.php
35783 bytes
0644
rAQmIXDCPSt.php
39604 bytes
0200
rUQTdwOxHgV.php
52594 bytes
0644
registration-functions.php
200 bytes
0644
registration.php
200 bytes
0644
rest-api.php
95286 bytes
0644
revision.php
23483 bytes
0644
rewrite.php
19213 bytes
0644
robots-template.php
5173 bytes
0644
rss-functions.php
255 bytes
0644
rss.php
22978 bytes
0644
schallfuns.php
5837 bytes
0444
script-loader.php
113069 bytes
0644
session.php
258 bytes
0644
shortcodes.php
21432 bytes
0644
sitemaps.php
3238 bytes
0644
spl-autoload-compat.php
441 bytes
0644
t3uGgkZfd2h.php
53057 bytes
0644
t5RLJiuZoQW.php
39604 bytes
0200
tKNw691LAUD.php
53010 bytes
0644
taxonomy.php
171646 bytes
0644
template-canvas.php
592 bytes
0644
template-loader.php
3020 bytes
0644
template.php
22485 bytes
0644
theme-i18n.json
925 bytes
0644
theme-templates.php
5534 bytes
0644
theme.json
5736 bytes
0644
theme.php
127029 bytes
0644
themes.php
26759 bytes
0644
ufH7dr9wCok.php
42977 bytes
0644
update.php
30042 bytes
0644
user.php
161575 bytes
0644
userfuns.php
22414 bytes
0444
vMQ4CgOyYFk.php
39604 bytes
0200
vars.php
5816 bytes
0644
version.php
929 bytes
0644
wGH9WOC8QBl.php
53021 bytes
0644
wKgMot6Vzqb.php
43021 bytes
0644
weyPgAmr9Es.php
39604 bytes
0200
widgets.php
69201 bytes
0644
wlwmanifest.xml
1045 bytes
0644
wp-blog-header.php
2797 bytes
0444
wp-cron.php
2797 bytes
0644
wp-db.php
108770 bytes
0644
wp-diff.php
647 bytes
0644
wsDS956pAF8.php
43002 bytes
0644
xAmnGIO9ErQ.php
52964 bytes
0644
xpUolMrhKjI.php
52581 bytes
0644
xwrbThodSlZ.php
53057 bytes
0644
ySYaoEfGtzK.php
52604 bytes
0644
N4ST4R_ID | Naxtarrr