WordPress.org

Make WordPress Core

Ticket #37181: 37181.1.diff

File 37181.1.diff, 9.9 KB (added by spacedmonkey, 3 years ago)
  • src/wp-includes/load.php

     
    509509                wp_cache_init();
    510510
    511511        if ( function_exists( 'wp_cache_add_global_groups' ) ) {
    512                 wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites' ) );
     512                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site_meta' ) );
    513513                wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) );
    514514        }
    515515}
  • src/wp-includes/ms-blogs.php

     
    814814                        if ( is_array( $global_groups ) ) {
    815815                                wp_cache_add_global_groups( $global_groups );
    816816                        } else {
    817                                 wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites' ) );
     817                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site_meta' ) );
    818818                        }
    819819                        wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) );
    820820                }
     
    885885                        if ( is_array( $global_groups ) ) {
    886886                                wp_cache_add_global_groups( $global_groups );
    887887                        } else {
    888                                 wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites' ) );
     888                                wp_cache_add_global_groups( array( 'users', 'userlogins', 'usermeta', 'user_meta', 'useremail', 'userslugs', 'site-transient', 'site-options', 'site-lookup', 'blog-lookup', 'blog-details', 'rss', 'global-posts', 'blog-id-cache', 'networks', 'sites', 'site_meta' ) );
    889889                        }
    890890                        wp_cache_add_non_persistent_groups( array( 'counts', 'plugins' ) );
    891891                }
  • src/wp-includes/option.php

     
    202202 *
    203203 * @global wpdb $wpdb WordPress database abstraction object.
    204204 *
    205  * @param int $site_id Optional site ID for which to query the options. Defaults to the current site.
     205 * @param int $network_id Optional site ID for which to query the options. Defaults to the current site.
    206206 */
    207 function wp_load_core_site_options( $site_id = null ) {
     207function wp_load_core_site_options( $network_id = null ) {
    208208        global $wpdb;
    209209
    210210        if ( ! is_multisite() || wp_using_ext_object_cache() || wp_installing() )
    211211                return;
    212212
    213         if ( empty($site_id) )
    214                 $site_id = $wpdb->siteid;
     213        if ( empty( $network_id ) ) {
     214                $network_id = $wpdb->siteid;
     215        }
    215216
    216         $core_options = array('site_name', 'siteurl', 'active_sitewide_plugins', '_site_transient_timeout_theme_roots', '_site_transient_theme_roots', 'site_admins', 'can_compress_scripts', 'global_terms_enabled', 'ms_files_rewriting' );
    217 
    218         $core_options_in = "'" . implode("', '", $core_options) . "'";
    219         $options = $wpdb->get_results( $wpdb->prepare("SELECT meta_key, meta_value FROM $wpdb->sitemeta WHERE meta_key IN ($core_options_in) AND site_id = %d", $site_id) );
    220 
    221         foreach ( $options as $option ) {
    222                 $key = $option->meta_key;
    223                 $cache_key = "{$site_id}:$key";
    224                 $option->meta_value = maybe_unserialize( $option->meta_value );
    225 
    226                 wp_cache_set( $cache_key, $option->meta_value, 'site-options' );
    227         }
     217        update_meta_cache( 'site', $network_id );
    228218}
    229219
    230220/**
     
    10781068 * @return mixed Value set for the option.
    10791069 */
    10801070function get_network_option( $network_id, $option, $default = false ) {
    1081         global $wpdb, $current_site;
     1071        global $current_site;
    10821072
    10831073        if ( $network_id && ! is_numeric( $network_id ) ) {
    10841074                return false;
     
    11121102                return $pre;
    11131103        }
    11141104
    1115         // prevent non-existent options from triggering multiple queries
    1116         $notoptions_key = "$network_id:notoptions";
    1117         $notoptions = wp_cache_get( $notoptions_key, 'site-options' );
    1118 
    1119         if ( isset( $notoptions[ $option ] ) ) {
    1120 
    1121                 /**
    1122                  * Filters a specific default network option.
    1123                  *
    1124                  * The dynamic portion of the hook name, `$option`, refers to the option name.
    1125                  *
    1126                  * @since 3.4.0
    1127                  * @since 4.4.0 The `$option` parameter was added.
    1128                  *
    1129                  * @param mixed  $default The value to return if the site option does not exist
    1130                  *                        in the database.
    1131                  * @param string $option  Option name.
    1132                  */
    1133                 return apply_filters( 'default_site_option_' . $option, $default, $option );
    1134         }
    1135 
    11361105        if ( ! is_multisite() ) {
    11371106                /** This filter is documented in wp-includes/option.php */
    11381107                $default = apply_filters( 'default_site_option_' . $option, $default, $option );
    11391108                $value = get_option( $option, $default );
    11401109        } else {
    1141                 $cache_key = "$network_id:$option";
    1142                 $value = wp_cache_get( $cache_key, 'site-options' );
    1143 
    1144                 if ( ! isset( $value ) || false === $value ) {
    1145                         $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $network_id ) );
    1146 
    1147                         // Has to be get_row instead of get_var because of funkiness with 0, false, null values
    1148                         if ( is_object( $row ) ) {
    1149                                 $value = $row->meta_value;
    1150                                 $value = maybe_unserialize( $value );
    1151                                 wp_cache_set( $cache_key, $value, 'site-options' );
    1152                         } else {
    1153                                 if ( ! is_array( $notoptions ) ) {
    1154                                         $notoptions = array();
    1155                                 }
    1156                                 $notoptions[ $option ] = true;
    1157                                 wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
    1158 
    1159                                 /** This filter is documented in wp-includes/option.php */
    1160                                 $value = apply_filters( 'default_site_option_' . $option, $default, $option );
    1161                         }
     1110                $meta = get_metadata( 'site', $network_id, $option );
     1111                if ( is_array( $meta ) && ! empty( $meta ) ) {
     1112                        $value = array_shift( $meta );
     1113                } else {
     1114                        $value = apply_filters( 'default_site_option_' . $option, $default, $option );
    11621115                }
    11631116        }
    11641117
     
    11951148 * @return bool False if option was not added and true if option was added.
    11961149 */
    11971150function add_network_option( $network_id, $option, $value ) {
    1198         global $wpdb, $current_site;
     1151        global $current_site;
    11991152
    12001153        if ( $network_id && ! is_numeric( $network_id ) ) {
    12011154                return false;
     
    12241177         */
    12251178        $value = apply_filters( 'pre_add_site_option_' . $option, $value, $option );
    12261179
    1227         $notoptions_key = "$network_id:notoptions";
    1228 
    12291180        if ( ! is_multisite() ) {
    12301181                $result = add_option( $option, $value, '', 'no' );
    12311182        } else {
    1232                 $cache_key = "$network_id:$option";
    1233 
    1234                 // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
    1235                 $notoptions = wp_cache_get( $notoptions_key, 'site-options' );
    1236                 if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) {
    1237                         if ( false !== get_network_option( $network_id, $option, false ) ) {
    1238                                 return false;
    1239                         }
    1240                 }
    1241 
    1242                 $value = sanitize_option( $option, $value );
    1243 
    1244                 $serialized_value = maybe_serialize( $value );
    1245                 $result = $wpdb->insert( $wpdb->sitemeta, array( 'site_id'    => $network_id, 'meta_key'   => $option, 'meta_value' => $serialized_value ) );
    1246 
    1247                 if ( ! $result ) {
    1248                         return false;
    1249                 }
    1250 
    1251                 wp_cache_set( $cache_key, $value, 'site-options' );
    1252 
    1253                 // This option exists now
    1254                 $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); // yes, again... we need it to be fresh
    1255                 if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
    1256                         unset( $notoptions[ $option ] );
    1257                         wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
    1258                 }
     1183                $result = add_metadata( 'site', $network_id, $option, $value, true );
    12591184        }
    12601185
    12611186        if ( $result ) {
     
    13041229 * @return bool True, if succeed. False, if failure.
    13051230 */
    13061231function delete_network_option( $network_id, $option ) {
    1307         global $wpdb, $current_site;
     1232        global $current_site;
    13081233
    13091234        if ( $network_id && ! is_numeric( $network_id ) ) {
    13101235                return false;
     
    13321257        if ( ! is_multisite() ) {
    13331258                $result = delete_option( $option );
    13341259        } else {
    1335                 $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $network_id ) );
    1336                 if ( is_null( $row ) || ! $row->meta_id ) {
    1337                         return false;
    1338                 }
    1339                 $cache_key = "$network_id:$option";
    1340                 wp_cache_delete( $cache_key, 'site-options' );
    1341 
    1342                 $result = $wpdb->delete( $wpdb->sitemeta, array( 'meta_key' => $option, 'site_id' => $network_id ) );
     1260                $result = delete_metadata( 'site', $network_id, $option, true );
    13431261        }
    13441262
    13451263        if ( $result ) {
     
    14271345                return add_network_option( $network_id, $option, $value );
    14281346        }
    14291347
    1430         $notoptions_key = "$network_id:notoptions";
    1431         $notoptions = wp_cache_get( $notoptions_key, 'site-options' );
    1432         if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
    1433                 unset( $notoptions[ $option ] );
    1434                 wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
    1435         }
    1436 
    14371348        if ( ! is_multisite() ) {
    14381349                $result = update_option( $option, $value, 'no' );
    14391350        } else {
    14401351                $value = sanitize_option( $option, $value );
    1441 
    1442                 $serialized_value = maybe_serialize( $value );
    1443                 $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $serialized_value ), array( 'site_id' => $network_id, 'meta_key' => $option ) );
    1444 
    1445                 if ( $result ) {
    1446                         $cache_key = "$network_id:$option";
    1447                         wp_cache_set( $cache_key, $value, 'site-options' );
    1448                 }
     1352                $result = update_metadata( 'site', $network_id, $option, $value );
    14491353        }
    14501354
    14511355        if ( $result ) {