summaryrefslogtreecommitdiffstats
path: root/wp-includes/ms-network.php
diff options
context:
space:
mode:
Diffstat (limited to 'wp-includes/ms-network.php')
-rw-r--r--wp-includes/ms-network.php141
1 files changed, 141 insertions, 0 deletions
diff --git a/wp-includes/ms-network.php b/wp-includes/ms-network.php
new file mode 100644
index 0000000..8ab8819
--- /dev/null
+++ b/wp-includes/ms-network.php
@@ -0,0 +1,141 @@
+<?php
+/**
+ * Network API
+ *
+ * @package WordPress
+ * @subpackage Multisite
+ * @since 5.1.0
+ */
+
+/**
+ * Retrieves network data given a network ID or network object.
+ *
+ * Network data will be cached and returned after being passed through a filter.
+ * If the provided network is empty, the current network global will be used.
+ *
+ * @since 4.6.0
+ *
+ * @global WP_Network $current_site
+ *
+ * @param WP_Network|int|null $network Optional. Network to retrieve. Default is the current network.
+ * @return WP_Network|null The network object or null if not found.
+ */
+function get_network( $network = null ) {
+ global $current_site;
+ if ( empty( $network ) && isset( $current_site ) ) {
+ $network = $current_site;
+ }
+
+ if ( $network instanceof WP_Network ) {
+ $_network = $network;
+ } elseif ( is_object( $network ) ) {
+ $_network = new WP_Network( $network );
+ } else {
+ $_network = WP_Network::get_instance( $network );
+ }
+
+ if ( ! $_network ) {
+ return null;
+ }
+
+ /**
+ * Fires after a network is retrieved.
+ *
+ * @since 4.6.0
+ *
+ * @param WP_Network $_network Network data.
+ */
+ $_network = apply_filters( 'get_network', $_network );
+
+ return $_network;
+}
+
+/**
+ * Retrieves a list of networks.
+ *
+ * @since 4.6.0
+ *
+ * @param string|array $args Optional. Array or string of arguments. See WP_Network_Query::parse_query()
+ * for information on accepted arguments. Default empty array.
+ * @return array|int List of WP_Network objects, a list of network IDs when 'fields' is set to 'ids',
+ * or the number of networks when 'count' is passed as a query var.
+ */
+function get_networks( $args = array() ) {
+ $query = new WP_Network_Query();
+
+ return $query->query( $args );
+}
+
+/**
+ * Removes a network from the object cache.
+ *
+ * @since 4.6.0
+ *
+ * @global bool $_wp_suspend_cache_invalidation
+ *
+ * @param int|array $ids Network ID or an array of network IDs to remove from cache.
+ */
+function clean_network_cache( $ids ) {
+ global $_wp_suspend_cache_invalidation;
+
+ if ( ! empty( $_wp_suspend_cache_invalidation ) ) {
+ return;
+ }
+
+ $network_ids = (array) $ids;
+ wp_cache_delete_multiple( $network_ids, 'networks' );
+
+ foreach ( $network_ids as $id ) {
+ /**
+ * Fires immediately after a network has been removed from the object cache.
+ *
+ * @since 4.6.0
+ *
+ * @param int $id Network ID.
+ */
+ do_action( 'clean_network_cache', $id );
+ }
+
+ wp_cache_set_last_changed( 'networks' );
+}
+
+/**
+ * Updates the network cache of given networks.
+ *
+ * Will add the networks in $networks to the cache. If network ID already exists
+ * in the network cache then it will not be updated. The network is added to the
+ * cache using the network group with the key using the ID of the networks.
+ *
+ * @since 4.6.0
+ *
+ * @param array $networks Array of network row objects.
+ */
+function update_network_cache( $networks ) {
+ $data = array();
+ foreach ( (array) $networks as $network ) {
+ $data[ $network->id ] = $network;
+ }
+ wp_cache_add_multiple( $data, 'networks' );
+}
+
+/**
+ * Adds any networks from the given IDs to the cache that do not already exist in cache.
+ *
+ * @since 4.6.0
+ * @since 6.1.0 This function is no longer marked as "private".
+ *
+ * @see update_network_cache()
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param array $network_ids Array of network IDs.
+ */
+function _prime_network_caches( $network_ids ) {
+ global $wpdb;
+
+ $non_cached_ids = _get_non_cached_ids( $network_ids, 'networks' );
+ if ( ! empty( $non_cached_ids ) ) {
+ $fresh_networks = $wpdb->get_results( sprintf( "SELECT $wpdb->site.* FROM $wpdb->site WHERE id IN (%s)", implode( ',', array_map( 'intval', $non_cached_ids ) ) ) ); // phpcs:ignore WordPress.DB.PreparedSQL.NotPrepared
+
+ update_network_cache( $fresh_networks );
+ }
+}