WordPress.org

Make WordPress Core

Ticket #25344: 25344.2.diff

File 25344.2.diff, 11.3 KB (added by johnjamesjacoby, 8 months ago)
  • src/wp-includes/ms-blogs.php

    diff --git src/wp-includes/ms-blogs.php src/wp-includes/ms-blogs.php
    index 01bb986..de452dc 100644
     
    842842                        if ( is_array( $global_groups ) ) { 
    843843                                wp_cache_add_global_groups( $global_groups ); 
    844844                        } else { 
    845                                 wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site-details' ) ); 
     845                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site-details', 'site_meta' ) ); 
    846846                        } 
    847847                        wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) ); 
    848848                } 
     
    916916                        if ( is_array( $global_groups ) ) { 
    917917                                wp_cache_add_global_groups( $global_groups ); 
    918918                        } else { 
    919                                 wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site-details' ) ); 
     919                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site-details', 'site_meta' ) ); 
    920920                        } 
    921921                        wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) ); 
    922922                } 
  • src/wp-includes/ms-functions.php

    diff --git src/wp-includes/ms-functions.php src/wp-includes/ms-functions.php
    index a562cdf..0c4a005 100644
     
    25132513         */ 
    25142514        return apply_filters( 'subdirectory_reserved_names', $names ); 
    25152515} 
     2516 
     2517/** 
     2518 * Add metadata to a network. 
     2519 * 
     2520 * @since 4.7.0 
     2521 * 
     2522 * @param int    $id         Network ID. 
     2523 * @param string $meta_key   Metadata name. 
     2524 * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar. 
     2525 * @param bool   $unique     Optional. Whether the same key should not be added. 
     2526 *                           Default false. 
     2527 * @return int|false Meta ID on success, false on failure. 
     2528 */ 
     2529function add_network_meta( $id, $meta_key, $meta_value, $unique = false ) { 
     2530        return add_metadata( 'site', $id, $meta_key, $meta_value, $unique ); 
     2531} 
     2532 
     2533/** 
     2534 * Remove from a network, metadata matching key and/or value. 
     2535 * 
     2536 * You can match based on the key, or key and value. Removing based on key and 
     2537 * value, will keep from removing duplicate metadata with the same key. It also 
     2538 * allows removing all metadata matching key, if needed. 
     2539 * 
     2540 * @since 4.7.0 
     2541 * 
     2542 * @param int    $id         Network ID. 
     2543 * @param string $meta_key   Metadata name. 
     2544 * @param mixed  $meta_value Optional. Metadata value. Must be serializable if 
     2545 *                           non-scalar. Default empty. 
     2546 * @return bool True on success, false on failure. 
     2547 */ 
     2548function delete_network_meta( $id, $meta_key, $meta_value = '' ) { 
     2549        return delete_metadata( 'site', $id, $meta_key, $meta_value ); 
     2550} 
     2551 
     2552/** 
     2553 * Retrieve from a network, metadata value by key. 
     2554 * 
     2555 * @since 4.7.0 
     2556 * 
     2557 * @param int    $id        Network ID. 
     2558 * @param string $meta_key  Optional. The meta key to retrieve. By default, returns 
     2559 *                          data for all keys. Default empty. 
     2560 * @param bool   $single    Optional. Whether to return a single value. Default false. 
     2561 * @return mixed Will be an array if $single is false. Will be value of meta data 
     2562 *               field if $single is true. 
     2563 */ 
     2564function get_network_meta( $id, $meta_key = '', $single = false ) { 
     2565        return get_metadata( 'site', $id, $meta_key, $single ); 
     2566} 
     2567 
     2568/** 
     2569 * Update metadata for a network ID, and/or key, and/or value. 
     2570 * 
     2571 * Use the $prev_value parameter to differentiate between meta fields with the 
     2572 * same key and network ID. 
     2573 * 
     2574 * If the meta field for the network does not exist, it will be added. 
     2575 * 
     2576 * @since 4.7.0 
     2577 * 
     2578 * @param int    $id         Network ID. 
     2579 * @param string $meta_key   Metadata key. 
     2580 * @param mixed  $meta_value Metadata value. Must be serializable if non-scalar. 
     2581 * @param mixed  $prev_value Optional. Previous value to check before removing. 
     2582 *                           Default empty. 
     2583 * @return int|bool Meta ID if the key didn't exist, true on successful update, 
     2584 *                  false on failure. 
     2585 */ 
     2586function update_network_meta( $id, $meta_key, $meta_value, $prev_value = '' ) { 
     2587        return update_metadata( 'site', $id, $meta_key, $meta_value, $prev_value ); 
     2588} 
  • src/wp-includes/option.php

    diff --git src/wp-includes/option.php src/wp-includes/option.php
    index d58ae69..a305f7f 100644
     
    10911091 * @return mixed Value set for the option. 
    10921092 */ 
    10931093function get_network_option( $network_id, $option, $default = false ) { 
    1094         global $wpdb; 
    10951094 
    10961095        if ( $network_id && ! is_numeric( $network_id ) ) { 
    10971096                return false; 
     
    11271126                return $pre; 
    11281127        } 
    11291128 
    1130         // prevent non-existent options from triggering multiple queries 
    1131         $notoptions_key = "$network_id:notoptions"; 
    1132         $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); 
    1133  
    1134         if ( isset( $notoptions[ $option ] ) ) { 
    1135  
    1136                 /** 
    1137                  * Filters a specific default network option. 
    1138                  * 
    1139                  * The dynamic portion of the hook name, `$option`, refers to the option name. 
    1140                  * 
    1141                  * @since 3.4.0 
    1142                  * @since 4.4.0 The `$option` parameter was added. 
    1143                  * @since 4.7.0 The `$network_id` parameter was added. 
    1144                  * 
    1145                  * @param mixed  $default    The value to return if the site option does not exist 
    1146                  *                           in the database. 
    1147                  * @param string $option     Option name. 
    1148                  * @param int    $network_id ID of the network. 
    1149                  */ 
    1150                 return apply_filters( "default_site_option_{$option}", $default, $option, $network_id ); 
    1151         } 
     1129        /** 
     1130         * Filters a specific default network option. 
     1131         * 
     1132         * The dynamic portion of the hook name, `$option`, refers to the option name. 
     1133         * 
     1134         * @since 3.4.0 
     1135         * @since 4.4.0 The `$option` parameter was added. 
     1136         * @since 4.7.0 The `$network_id` parameter was added. 
     1137         * 
     1138         * @param mixed  $default    The value to return if the site option does not exist 
     1139         *                           in the database. 
     1140         * @param string $option     Option name. 
     1141         * @param int    $network_id ID of the network. 
     1142         */ 
     1143        $default = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id ); 
    11521144 
    11531145        if ( ! is_multisite() ) { 
    1154                 /** This filter is documented in wp-includes/option.php */ 
    1155                 $default = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id ); 
    11561146                $value = get_option( $option, $default ); 
    11571147        } else { 
    1158                 $cache_key = "$network_id:$option"; 
    1159                 $value = wp_cache_get( $cache_key, 'site-options' ); 
    1160  
    1161                 if ( ! isset( $value ) || false === $value ) { 
    1162                         $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $network_id ) ); 
    1163  
    1164                         // Has to be get_row instead of get_var because of funkiness with 0, false, null values 
    1165                         if ( is_object( $row ) ) { 
    1166                                 $value = $row->meta_value; 
    1167                                 $value = maybe_unserialize( $value ); 
    1168                                 wp_cache_set( $cache_key, $value, 'site-options' ); 
    1169                         } else { 
    1170                                 if ( ! is_array( $notoptions ) ) { 
    1171                                         $notoptions = array(); 
    1172                                 } 
    1173                                 $notoptions[ $option ] = true; 
    1174                                 wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); 
    1175  
    1176                                 /** This filter is documented in wp-includes/option.php */ 
    1177                                 $value = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id ); 
    1178                         } 
    1179                 } 
     1148                $value = get_network_meta( $network_id, $option, $default ); 
    11801149        } 
    11811150 
    11821151        /** 
     
    12131182 * @return bool False if option was not added and true if option was added. 
    12141183 */ 
    12151184function add_network_option( $network_id, $option, $value ) { 
    1216         global $wpdb; 
    12171185 
    12181186        if ( $network_id && ! is_numeric( $network_id ) ) { 
    12191187                return false; 
     
    12441212         */ 
    12451213        $value = apply_filters( "pre_add_site_option_{$option}", $value, $option, $network_id ); 
    12461214 
    1247         $notoptions_key = "$network_id:notoptions"; 
    1248  
    12491215        if ( ! is_multisite() ) { 
    12501216                $result = add_option( $option, $value, '', 'no' ); 
    12511217        } else { 
    1252                 $cache_key = "$network_id:$option"; 
    1253  
    1254                 // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query 
    1255                 $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); 
    1256                 if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) { 
    1257                         if ( false !== get_network_option( $network_id, $option, false ) ) { 
    1258                                 return false; 
    1259                         } 
    1260                 } 
    1261  
    1262                 $value = sanitize_option( $option, $value ); 
    1263  
    1264                 $serialized_value = maybe_serialize( $value ); 
    1265                 $result = $wpdb->insert( $wpdb->sitemeta, array( 'site_id'    => $network_id, 'meta_key'   => $option, 'meta_value' => $serialized_value ) ); 
    1266  
    1267                 if ( ! $result ) { 
    1268                         return false; 
    1269                 } 
    1270  
    1271                 wp_cache_set( $cache_key, $value, 'site-options' ); 
    1272  
    1273                 // This option exists now 
    1274                 $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); // yes, again... we need it to be fresh 
    1275                 if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) { 
    1276                         unset( $notoptions[ $option ] ); 
    1277                         wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); 
    1278                 } 
     1218                $result = add_network_meta( $network_id, $option, $value ); 
    12791219        } 
    12801220 
    12811221        if ( $result ) { 
     
    13271267 * @return bool True, if succeed. False, if failure. 
    13281268 */ 
    13291269function delete_network_option( $network_id, $option ) { 
    1330         global $wpdb; 
    13311270 
    13321271        if ( $network_id && ! is_numeric( $network_id ) ) { 
    13331272                return false; 
     
    13571296        if ( ! is_multisite() ) { 
    13581297                $result = delete_option( $option ); 
    13591298        } else { 
    1360                 $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $network_id ) ); 
    1361                 if ( is_null( $row ) || ! $row->meta_id ) { 
    1362                         return false; 
    1363                 } 
    1364                 $cache_key = "$network_id:$option"; 
    1365                 wp_cache_delete( $cache_key, 'site-options' ); 
    1366  
    1367                 $result = $wpdb->delete( $wpdb->sitemeta, array( 'meta_key' => $option, 'site_id' => $network_id ) ); 
     1299                $result = delete_network_meta( $network_id, $option ); 
    13681300        } 
    13691301 
    13701302        if ( $result ) { 
     
    14151347 * @return bool False if value was not updated and true if value was updated. 
    14161348 */ 
    14171349function update_network_option( $network_id, $option, $value ) { 
    1418         global $wpdb; 
    14191350 
    14201351        if ( $network_id && ! is_numeric( $network_id ) ) { 
    14211352                return false; 
     
    14571388                return add_network_option( $network_id, $option, $value ); 
    14581389        } 
    14591390 
    1460         $notoptions_key = "$network_id:notoptions"; 
    1461         $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); 
    1462         if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) { 
    1463                 unset( $notoptions[ $option ] ); 
    1464                 wp_cache_set( $notoptions_key, $notoptions, 'site-options' ); 
    1465         } 
    1466  
    14671391        if ( ! is_multisite() ) { 
    14681392                $result = update_option( $option, $value, 'no' ); 
    14691393        } else { 
    1470                 $value = sanitize_option( $option, $value ); 
    1471  
    1472                 $serialized_value = maybe_serialize( $value ); 
    1473                 $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $serialized_value ), array( 'site_id' => $network_id, 'meta_key' => $option ) ); 
    1474  
    1475                 if ( $result ) { 
    1476                         $cache_key = "$network_id:$option"; 
    1477                         wp_cache_set( $cache_key, $value, 'site-options' ); 
    1478                 } 
     1394                $value  = sanitize_option( $option, $value ); 
     1395                $result = update_network_meta( $network_id, $option, $value ); 
    14791396        } 
    14801397 
    14811398        if ( $result ) {