mirror of
https://github.com/gosticks/wordpress-develop.git
synced 2026-04-07 14:14:36 +00:00
Networks and Sites: Use metadata api in `*_network_options functions.
Replace logic found in `get_network_option`, `update_network_option` and `delete_network_option` to use the metadata api. Using the metadata api has a number of benefits, such as consistency, default values and useful filters. This change also improves performance by priming the caches of all network options in a single database request. Props spacedmonkey, swissspidy, sc0ttkclark, johnjamesjacoby, flixos90, jeremyfelt, pento, peterwilsoncc, mukesh27, desrosj. Fixes #37181 git-svn-id: https://develop.svn.wordpress.org/trunk@54080 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
@@ -89,49 +89,52 @@ class WP_Network_Query {
|
||||
* @param string|array $query {
|
||||
* Optional. Array or query string of network query parameters. Default empty.
|
||||
*
|
||||
* @type int[] $network__in Array of network IDs to include. Default empty.
|
||||
* @type int[] $network__not_in Array of network IDs to exclude. Default empty.
|
||||
* @type bool $count Whether to return a network count (true) or array of network objects.
|
||||
* Default false.
|
||||
* @type string $fields Network fields to return. Accepts 'ids' (returns an array of network IDs)
|
||||
* or empty (returns an array of complete network objects). Default empty.
|
||||
* @type int $number Maximum number of networks to retrieve. Default empty (no limit).
|
||||
* @type int $offset Number of networks 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 Network status or array of statuses. Accepts 'id', 'domain', 'path',
|
||||
* 'domain_length', 'path_length' and 'network__in'. Also accepts false,
|
||||
* an empty array, or 'none' to disable `ORDER BY` clause. Default 'id'.
|
||||
* @type string $order How to order retrieved networks. Accepts 'ASC', 'DESC'. Default 'ASC'.
|
||||
* @type string $domain Limit results to those affiliated with a given domain. Default empty.
|
||||
* @type string[] $domain__in Array of domains to include affiliated networks for. Default empty.
|
||||
* @type string[] $domain__not_in Array of domains to exclude affiliated networks 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 networks for. Default empty.
|
||||
* @type string[] $path__not_in Array of paths to exclude affiliated networks for. Default empty.
|
||||
* @type string $search Search term(s) to retrieve matching networks for. Default empty.
|
||||
* @type bool $update_network_cache Whether to prime the cache for found networks. Default true.
|
||||
* @type int[] $network__in Array of network IDs to include. Default empty.
|
||||
* @type int[] $network__not_in Array of network IDs to exclude. Default empty.
|
||||
* @type bool $count Whether to return a network count (true) or array of network objects.
|
||||
* Default false.
|
||||
* @type string $fields Network fields to return. Accepts 'ids' (returns an array of network IDs)
|
||||
* or empty (returns an array of complete network objects). Default empty.
|
||||
* @type int $number Maximum number of networks to retrieve. Default empty (no limit).
|
||||
* @type int $offset Number of networks 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 Network status or array of statuses. Accepts 'id', 'domain', 'path',
|
||||
* 'domain_length', 'path_length' and 'network__in'. Also accepts false,
|
||||
* an empty array, or 'none' to disable `ORDER BY` clause. Default 'id'.
|
||||
* @type string $order How to order retrieved networks. Accepts 'ASC', 'DESC'. Default 'ASC'.
|
||||
* @type string $domain Limit results to those affiliated with a given domain. Default empty.
|
||||
* @type string[] $domain__in Array of domains to include affiliated networks for. Default empty.
|
||||
* @type string[] $domain__not_in Array of domains to exclude affiliated networks 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 networks for. Default empty.
|
||||
* @type string[] $path__not_in Array of paths to exclude affiliated networks for. Default empty.
|
||||
* @type string $search Search term(s) to retrieve matching networks for. Default empty.
|
||||
* @type bool $update_network_cache Whether to prime the cache for found networks. Default true.
|
||||
* @type bool $update_network_meta_cache Whether to prime the metadata (option) cache for found networks.
|
||||
* Default true.
|
||||
* }
|
||||
*/
|
||||
public function __construct( $query = '' ) {
|
||||
$this->query_var_defaults = array(
|
||||
'network__in' => '',
|
||||
'network__not_in' => '',
|
||||
'count' => false,
|
||||
'fields' => '',
|
||||
'number' => '',
|
||||
'offset' => '',
|
||||
'no_found_rows' => true,
|
||||
'orderby' => 'id',
|
||||
'order' => 'ASC',
|
||||
'domain' => '',
|
||||
'domain__in' => '',
|
||||
'domain__not_in' => '',
|
||||
'path' => '',
|
||||
'path__in' => '',
|
||||
'path__not_in' => '',
|
||||
'search' => '',
|
||||
'update_network_cache' => true,
|
||||
'network__in' => '',
|
||||
'network__not_in' => '',
|
||||
'count' => false,
|
||||
'fields' => '',
|
||||
'number' => '',
|
||||
'offset' => '',
|
||||
'no_found_rows' => true,
|
||||
'orderby' => 'id',
|
||||
'order' => 'ASC',
|
||||
'domain' => '',
|
||||
'domain__in' => '',
|
||||
'domain__not_in' => '',
|
||||
'path' => '',
|
||||
'path__in' => '',
|
||||
'path__not_in' => '',
|
||||
'search' => '',
|
||||
'update_network_cache' => true,
|
||||
'update_network_meta_cache' => true,
|
||||
);
|
||||
|
||||
if ( ! empty( $query ) ) {
|
||||
@@ -242,8 +245,8 @@ class WP_Network_Query {
|
||||
// $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, $update_network_cache arguments as the queried result will be the same regardless.
|
||||
unset( $_args['fields'], $_args['update_network_cache'] );
|
||||
// Ignore the $fields, $update_network_cache, and $update_network_meta_cache arguments as the queried result will be the same regardless.
|
||||
unset( $_args['fields'], $_args['update_network_cache'], $_args['update_network_meta_cache'] );
|
||||
|
||||
$key = md5( serialize( $_args ) );
|
||||
$last_changed = wp_cache_get_last_changed( 'networks' );
|
||||
@@ -285,7 +288,7 @@ class WP_Network_Query {
|
||||
}
|
||||
|
||||
if ( $this->query_vars['update_network_cache'] ) {
|
||||
_prime_network_caches( $network_ids );
|
||||
_prime_network_caches( $network_ids, $this->query_vars['update_network_meta_cache'] );
|
||||
}
|
||||
|
||||
// Fetch full network objects from the primed cache.
|
||||
|
||||
Reference in New Issue
Block a user