WordPress.org

Make WordPress Core

Ticket #28290: 28290.2a.patch

File 28290.2a.patch, 19.1 KB (added by spacedmonkey, 4 years ago)

option.php changes

  • wp-includes/option.php

    diff --git a/wp-includes/option.php b/wp-includes/option.php
    index ab8f81b..903296c 100644
    a b function delete_all_user_settings() { 
    975975 * Retrieve site option value based on name of option.
    976976 *
    977977 * @since 2.8.0
     978 * @since 4.4.0 Modified into wrapper for get_network_option()
     979 *
     980 * @see get_network_option()
     981 *
     982 *
     983 * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.
     984 * @param mixed $default Optional value to return if option doesn't exist. Default false.
     985 * @param bool $deprecated Whether to use cache. Multisite only. Always set to true.
     986 *
     987 * @return mixed Value set for the option.
     988 */
     989function get_site_option( $option, $default = false, $deprecated = true ) {
     990        return get_network_option( $option, $default );
     991}
     992
     993/**
     994 * Add a new site option.
     995 *
     996 * Existing options will not be updated. Note that prior to 3.3 this wasn't the case.
     997 *
     998 * @since 2.8.0
     999 * @since 4.4.0 Modified into wrapper for add_network_option()
     1000 *
     1001 * @see add_network_option()
     1002 *
     1003 *
     1004 * @param string $option Name of option to add. Expected to not be SQL-escaped.
     1005 * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.
     1006 *
     1007 * @return bool False if option was not added and true if option was added.
     1008 */
     1009function add_site_option( $option, $value ) {
     1010        return add_network_option( $option, $value );
     1011}
     1012
     1013/**
     1014 * Removes site option by name.
     1015 *
     1016 * @since 2.8.0
     1017 * @since 4.4.0 Modified into wrapper for delete_network_option()
     1018 *
     1019 * @see delete_network_option()
     1020 *
     1021 *
     1022 * @param string $option Name of option to remove. Expected to not be SQL-escaped.
     1023 *
     1024 * @return bool True, if succeed. False, if failure.
     1025 */
     1026function delete_site_option( $option ) {
     1027        return delete_network_option( $option );
     1028}
     1029
     1030/**
     1031 * Update the value of a site option that was already added.
     1032 *
     1033 * @since 2.8.0
     1034 * @since 4.4.0 Modified into wrapper for update_network_option()
     1035 *
     1036 * @see update_network_option()
     1037 *
     1038 *
     1039 * @param string $option Name of option. Expected to not be SQL-escaped.
     1040 * @param mixed $value Option value. Expected to not be SQL-escaped.
     1041 *
     1042 * @return bool False if value was not updated and true if value was updated.
     1043 */
     1044function update_site_option( $option, $value ) {
     1045        return update_network_option( $option, $value );
     1046}
     1047
     1048/**
     1049 * Retrieve site option value based on name of option.
     1050 *
     1051 * @since 4.4.0
    9781052 *
    9791053 * @see get_option()
    9801054 *
    9811055 * @global wpdb $wpdb
    9821056 *
    983  * @param string $option    Name of option to retrieve. Expected to not be SQL-escaped.
    984  * @param mixed  $default   Optional value to return if option doesn't exist. Default false.
    985  * @param bool   $use_cache Whether to use cache. Multisite only. Default true.
     1057 * @param string $option Name of option to retrieve. Expected to not be SQL-escaped.
     1058 * @param mixed $default Optional value to return if option doesn't exist. Default false.
     1059 * @param int|bool $network_id ID of the network.
     1060 *
    9861061 * @return mixed Value set for the option.
    9871062 */
    988 function get_site_option( $option, $default = false, $use_cache = true ) {
     1063function get_network_option( $option, $default = false, $network_id = true ) {
    9891064        global $wpdb;
    9901065
     1066        /** If network ID not set, get current network. **/
     1067        if ( false === $network_id && is_multisite() ) {
     1068                $current_network = get_current_site();
     1069                $network_id      = $current_network->id;
     1070        }
     1071        /** Make sure network id is an int */
     1072        $network_id = (int) $network_id;
     1073
    9911074        /**
    9921075         * Filter an existing site option before it is retrieved.
    9931076         *
    function get_site_option( $option, $default = false, $use_cache = true ) { 
    10001083         * @since 3.0.0
    10011084         * @since 4.4.0 The `$option` parameter was added
    10021085         *
    1003          * @param mixed  $pre_option The default value to return if the option does not exist.
    1004          * @param string $option     Option name.
     1086         * @param mixed $pre_option The default value to return if the option does not exist.
     1087         * @param string $option Option name.
    10051088         */
    10061089        $pre = apply_filters( 'pre_site_option_' . $option, false, $option );
    10071090
    1008         if ( false !== $pre )
    1009                 return $pre;
     1091        if ( false !== $pre ) {
     1092                return $pre;
     1093        }
    10101094
    10111095        // prevent non-existent options from triggering multiple queries
    1012         $notoptions_key = "{$wpdb->siteid}:notoptions";
    1013         $notoptions = wp_cache_get( $notoptions_key, 'site-options' );
     1096        $notoptions_key = "{$network_id}:notoptions";
     1097        $notoptions     = wp_cache_get( $notoptions_key, 'site-options' );
    10141098
    1015         if ( isset( $notoptions[$option] ) ) {
     1099        if ( isset( $notoptions[ $option ] ) ) {
    10161100
    10171101                /**
    10181102                 * Filter a specific default site option.
    function get_site_option( $option, $default = false, $use_cache = true ) { 
    10221106                 * @since 3.4.0
    10231107                 * @since 4.4.0 The `$option` parameter was added.
    10241108                 *
    1025                  * @param mixed  $default The value to return if the site option does not exist
     1109                 * @param mixed $default The value to return if the site option does not exist
    10261110                 *                        in the database.
    1027                  * @param string $option  Option name.
     1111                 * @param string $option Option name.
    10281112                 */
    10291113                return apply_filters( 'default_site_option_' . $option, $default, $option );
    10301114        }
    function get_site_option( $option, $default = false, $use_cache = true ) { 
    10331117
    10341118                /** This filter is documented in wp-includes/option.php */
    10351119                $default = apply_filters( 'default_site_option_' . $option, $default, $option );
    1036                 $value = get_option($option, $default);
     1120                $value   = get_option( $option, $default );
    10371121        } else {
    1038                 $cache_key = "{$wpdb->siteid}:$option";
    1039                 if ( $use_cache )
    1040                         $value = wp_cache_get($cache_key, 'site-options');
     1122                $cache_key = "{$network_id}:$option";
     1123                $value     = wp_cache_get( $cache_key, 'site-options' );
    10411124
    1042                 if ( !isset($value) || (false === $value) ) {
    1043                         $row = $wpdb->get_row( $wpdb->prepare("SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) );
     1125                if ( false === $value ) {
     1126                        $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $network_id ) );
    10441127
    10451128                        // Has to be get_row instead of get_var because of funkiness with 0, false, null values
    10461129                        if ( is_object( $row ) ) {
    function get_site_option( $option, $default = false, $use_cache = true ) { 
    10491132                                wp_cache_set( $cache_key, $value, 'site-options' );
    10501133                        } else {
    10511134                                if ( ! is_array( $notoptions ) ) {
    1052                                          $notoptions = array();
     1135                                        $notoptions = array();
    10531136                                }
    1054                                 $notoptions[$option] = true;
     1137                                $notoptions[ $option ] = true;
    10551138                                wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
    10561139
    10571140                                /** This filter is documented in wp-includes/option.php */
    function get_site_option( $option, $default = false, $use_cache = true ) { 
    10691152         * @since 3.0.0
    10701153         * @since 4.4.0 The `$option` parameter was added
    10711154         *
    1072          * @param mixed  $value Value of site option.
     1155         * @param mixed $value Value of site option.
    10731156         * @param string $option Option name.
    10741157         */
     1158
    10751159        return apply_filters( 'site_option_' . $option, $value, $option );
    10761160}
    10771161
    10781162/**
    1079  * Add a new site option.
     1163 * Add a new network option.
    10801164 *
    10811165 * Existing options will not be updated. Note that prior to 3.3 this wasn't the case.
    10821166 *
    1083  * @since 2.8.0
     1167 * @since 4.4.0
    10841168 *
    10851169 * @see add_option()
    10861170 *
    10871171 * @global wpdb $wpdb
    10881172 *
    10891173 * @param string $option Name of option to add. Expected to not be SQL-escaped.
    1090  * @param mixed  $value  Optional. Option value, can be anything. Expected to not be SQL-escaped.
     1174 * @param mixed $value Optional. Option value, can be anything. Expected to not be SQL-escaped.
     1175 * @param  int|bool $network_id ID of the network.
     1176 *
    10911177 * @return bool False if option was not added and true if option was added.
    10921178 */
    1093 function add_site_option( $option, $value ) {
     1179function add_network_option( $option, $value, $network_id = false ) {
    10941180        global $wpdb;
    10951181
     1182        /** If network ID not set, get current network. **/
     1183        if ( false === $network_id && is_multisite() ) {
     1184                $current_network = get_current_site();
     1185                $network_id      = $current_network->id;
     1186        }
     1187        /** Make sure network id is an int */
     1188        $network_id = (int) $network_id;
     1189
    10961190        wp_protect_special_option( $option );
    10971191
    10981192        /**
    function add_site_option( $option, $value ) { 
    11041198         * @since 3.0.0
    11051199         * @since 4.4.0 The `$option` parameter was added
    11061200         *
    1107          * @param mixed  $value Value of site option.
     1201         * @param mixed $value Value of site option.
    11081202         * @param string $option Option name.
    11091203         */
    11101204        $value = apply_filters( 'pre_add_site_option_' . $option, $value, $option );
    11111205
    1112         $notoptions_key = "{$wpdb->siteid}:notoptions";
     1206        $notoptions_key = "{$network_id}:notoptions";
    11131207
    1114         if ( !is_multisite() ) {
     1208        if ( ! is_multisite() ) {
    11151209                $result = add_option( $option, $value );
    11161210        } else {
    1117                 $cache_key = "{$wpdb->siteid}:$option";
     1211                $cache_key = "{$network_id}:$option";
    11181212
    11191213                // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
    11201214                $notoptions = wp_cache_get( $notoptions_key, 'site-options' );
    1121                 if ( ! is_array( $notoptions ) || ! isset( $notoptions[$option] ) )
    1122                         if ( false !== get_site_option( $option ) )
     1215                if ( ! is_array( $notoptions ) || ! isset( $notoptions[ $option ] ) ) {
     1216                        if ( false !== get_network_option( $option, false, $network_id ) ) {
    11231217                                return false;
     1218                        }
     1219                }
    11241220
    11251221                $value = sanitize_option( $option, $value );
    11261222
    11271223                $serialized_value = maybe_serialize( $value );
    1128                 $result = $wpdb->insert( $wpdb->sitemeta, array('site_id' => $wpdb->siteid, 'meta_key' => $option, 'meta_value' => $serialized_value ) );
     1224                $result           = $wpdb->insert( $wpdb->sitemeta, array(
     1225                        'site_id'    => $network_id,
     1226                        'meta_key'   => $option,
     1227                        'meta_value' => $serialized_value
     1228                ) );
    11291229
    1130                 if ( ! $result )
     1230                if ( ! $result ) {
    11311231                        return false;
     1232                }
    11321233
    11331234                wp_cache_set( $cache_key, $value, 'site-options' );
    11341235
    11351236                // This option exists now
    11361237                $notoptions = wp_cache_get( $notoptions_key, 'site-options' ); // yes, again... we need it to be fresh
    1137                 if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
    1138                         unset( $notoptions[$option] );
     1238                if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
     1239                        unset( $notoptions[ $option ] );
    11391240                        wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
    11401241                }
    11411242        }
    function add_site_option( $option, $value ) { 
    11511252                 * @since 3.0.0
    11521253                 *
    11531254                 * @param string $option Name of site option.
    1154                  * @param mixed  $value Value of site option.
     1255                 * @param mixed $value Value of site option.
    11551256                 */
    11561257                do_action( "add_site_option_{$option}", $option, $value );
    11571258
    function add_site_option( $option, $value ) { 
    11611262                 * @since 3.0.0
    11621263                 *
    11631264                 * @param string $option Name of site option.
    1164                  * @param mixed  $value Value of site option.
     1265                 * @param mixed $value Value of site option.
    11651266                 */
    11661267                do_action( "add_site_option", $option, $value );
    11671268
    11681269                return true;
    11691270        }
     1271
    11701272        return false;
    11711273}
    11721274
    11731275/**
    1174  * Removes site option by name.
     1276 * Removes network option by name.
    11751277 *
    1176  * @since 2.8.0
     1278 * @since 4.4.0
    11771279 *
    11781280 * @see delete_option()
    11791281 *
    11801282 * @global wpdb $wpdb
    11811283 *
    1182  * @param string $option Name of option to remove. Expected to not be SQL-escaped.
     1284 * @param  string $option Name of option to remove. Expected to not be SQL-escaped.
     1285 * @param  int|bool $network_id ID of the network.
     1286 *
    11831287 * @return bool True, if succeed. False, if failure.
    11841288 */
    1185 function delete_site_option( $option ) {
     1289function delete_network_option( $option, $network_id = false ) {
    11861290        global $wpdb;
    11871291
     1292        /** If network ID not set, get current network. **/
     1293        if ( false === $network_id && is_multisite() ) {
     1294                $current_network = get_current_site();
     1295                $network_id      = $current_network->id;
     1296        }
     1297        /** Make sure network id is an int */
     1298        $network_id = (int) $network_id;
     1299
    11881300        // ms_protect_special_option( $option ); @todo
    11891301
    11901302        /**
    function delete_site_option( $option ) { 
    11991311         */
    12001312        do_action( 'pre_delete_site_option_' . $option, $option );
    12011313
    1202         if ( !is_multisite() ) {
     1314        if ( ! is_multisite() ) {
    12031315                $result = delete_option( $option );
    12041316        } else {
    1205                 $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) );
    1206                 if ( is_null( $row ) || !$row->meta_id )
     1317                $row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_id FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $network_id ) );
     1318                if ( is_null( $row ) || ! $row->meta_id ) {
    12071319                        return false;
    1208                 $cache_key = "{$wpdb->siteid}:$option";
     1320                }
     1321                $cache_key = "{$network_id}:$option";
    12091322                wp_cache_delete( $cache_key, 'site-options' );
    12101323
    1211                 $result = $wpdb->delete( $wpdb->sitemeta, array( 'meta_key' => $option, 'site_id' => $wpdb->siteid ) );
     1324                $result = $wpdb->delete( $wpdb->sitemeta, array( 'meta_key' => $option, 'site_id' => $network_id ) );
    12121325        }
    12131326
    12141327        if ( $result ) {
    function delete_site_option( $option ) { 
    12341347                 */
    12351348                do_action( "delete_site_option", $option );
    12361349
     1350
    12371351                return true;
    12381352        }
     1353
    12391354        return false;
    12401355}
    12411356
    12421357/**
    1243  * Update the value of a site option that was already added.
     1358 * Update the value of a network option that was already added.
    12441359 *
    1245  * @since 2.8.0
     1360 * @since 4.4.0
    12461361 *
    12471362 * @see update_option()
    12481363 *
    12491364 * @global wpdb $wpdb
    12501365 *
    12511366 * @param string $option Name of option. Expected to not be SQL-escaped.
    1252  * @param mixed  $value  Option value. Expected to not be SQL-escaped.
     1367 * @param mixed $value Option value. Expected to not be SQL-escaped.
     1368 * @param  int|bool $network_id ID of the network.
     1369 *
    12531370 * @return bool False if value was not updated and true if value was updated.
    12541371 */
    1255 function update_site_option( $option, $value ) {
     1372function update_network_option( $option, $value, $network_id = false ) {
    12561373        global $wpdb;
    12571374
     1375        /** If network ID not set, get current network. **/
     1376        if ( false === $network_id && is_multisite() ) {
     1377                $current_network = get_current_site();
     1378                $network_id      = $current_network->id;
     1379        }
     1380        /** Make sure network id is an int */
     1381        $network_id = (int) $network_id;
     1382
    12581383        wp_protect_special_option( $option );
    12591384
    1260         $old_value = get_site_option( $option );
     1385        $old_value = get_network_option( $option, false, $network_id );
    12611386
    12621387        /**
    12631388         * Filter a specific site option before its value is updated.
    function update_site_option( $option, $value ) { 
    12681393         * @since 3.0.0
    12691394         * @since 4.4.0 The `$option` parameter was added
    12701395         *
    1271          * @param mixed  $value    New value of site option.
    1272          * @param mixed  $old_value Old value of site option.
    1273          * @param string $option    Option name.
     1396         * @param mixed $value New value of site option.
     1397         * @param mixed $old_value Old value of site option.
     1398         * @param string $option Option name.
    12741399         */
    12751400        $value = apply_filters( 'pre_update_site_option_' . $option, $value, $old_value, $option );
    12761401
    1277         if ( $value === $old_value )
     1402        if ( $value === $old_value ) {
    12781403                return false;
     1404        }
    12791405
    1280         if ( false === $old_value )
    1281                 return add_site_option( $option, $value );
     1406        if ( false === $old_value ) {
     1407                return add_network_option( $option, $value, $network_id );
     1408        }
    12821409
    1283         $notoptions_key = "{$wpdb->siteid}:notoptions";
    1284         $notoptions = wp_cache_get( $notoptions_key, 'site-options' );
    1285         if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
    1286                 unset( $notoptions[$option] );
     1410        $notoptions_key = "{$network_id}:notoptions";
     1411        $notoptions     = wp_cache_get( $notoptions_key, 'site-options' );
     1412        if ( is_array( $notoptions ) && isset( $notoptions[ $option ] ) ) {
     1413                unset( $notoptions[ $option ] );
    12871414                wp_cache_set( $notoptions_key, $notoptions, 'site-options' );
    12881415        }
    12891416
    1290         if ( !is_multisite() ) {
     1417        if ( ! is_multisite() ) {
    12911418                $result = update_option( $option, $value );
    12921419        } else {
    12931420                $value = sanitize_option( $option, $value );
    12941421
    12951422                $serialized_value = maybe_serialize( $value );
    1296                 $result = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $serialized_value ), array( 'site_id' => $wpdb->siteid, 'meta_key' => $option ) );
     1423                $result           = $wpdb->update( $wpdb->sitemeta, array( 'meta_value' => $serialized_value ), array(
     1424                        'site_id'  => $network_id,
     1425                        'meta_key' => $option
     1426                ) );
    12971427
    12981428                if ( $result ) {
    1299                         $cache_key = "{$wpdb->siteid}:$option";
     1429                        $cache_key = "{$network_id}:$option";
    13001430                        wp_cache_set( $cache_key, $value, 'site-options' );
    13011431                }
    13021432        }
    function update_site_option( $option, $value ) { 
    13111441                 * @since 2.9.0 As "update_site_option_{$key}"
    13121442                 * @since 3.0.0
    13131443                 *
    1314                  * @param string $option    Name of site option.
    1315                  * @param mixed  $value    Current value of site option.
    1316                  * @param mixed  $old_value Old value of site option.
     1444                 * @param string $option Name of site option.
     1445                 * @param mixed $value Current value of site option.
     1446                 * @param mixed $old_value Old value of site option.
    13171447                 */
    13181448                do_action( "update_site_option_{$option}", $option, $value, $old_value );
    13191449
    function update_site_option( $option, $value ) { 
    13221452                 *
    13231453                 * @since 3.0.0
    13241454                 *
    1325                  * @param string $option    Name of site option.
    1326                  * @param mixed  $value    Current value of site option.
    1327                  * @param mixed  $old_value Old value of site option.
     1455                 * @param string $option Name of site option.
     1456                 * @param mixed $value Current value of site option.
     1457                 * @param mixed $old_value Old value of site option.
    13281458                 */
    13291459                do_action( "update_site_option", $option, $value, $old_value );
    13301460
    13311461                return true;
    13321462        }
     1463
    13331464        return false;
    13341465}
    13351466
    function delete_site_transient( $transient ) { 
    13591490        } else {
    13601491                $option_timeout = '_site_transient_timeout_' . $transient;
    13611492                $option = '_site_transient_' . $transient;
    1362                 $result = delete_site_option( $option );
     1493                $result = delete_network_option( $option );
    13631494                if ( $result )
    1364                         delete_site_option( $option_timeout );
     1495                        delete_network_option( $option_timeout );
    13651496        }
    13661497        if ( $result ) {
    13671498
    function get_site_transient( $transient ) { 
    14221553                $transient_option = '_site_transient_' . $transient;
    14231554                if ( ! in_array( $transient, $no_timeout ) ) {
    14241555                        $transient_timeout = '_site_transient_timeout_' . $transient;
    1425                         $timeout = get_site_option( $transient_timeout );
     1556                        $timeout = get_network_option( $transient_timeout );
    14261557                        if ( false !== $timeout && $timeout < time() ) {
    1427                                 delete_site_option( $transient_option  );
    1428                                 delete_site_option( $transient_timeout );
     1558                                delete_network_option( $transient_option  );
     1559                                delete_network_option( $transient_timeout );
    14291560                                $value = false;
    14301561                        }
    14311562                }
    14321563
    14331564                if ( ! isset( $value ) )
    1434                         $value = get_site_option( $transient_option );
     1565                        $value = get_network_option( $transient_option );
    14351566        }
    14361567
    14371568        /**
    function set_site_transient( $transient, $value, $expiration = 0 ) { 
    14861617        } else {
    14871618                $transient_timeout = '_site_transient_timeout_' . $transient;
    14881619                $option = '_site_transient_' . $transient;
    1489                 if ( false === get_site_option( $option ) ) {
     1620                if ( false === get_network_option( $option ) ) {
    14901621                        if ( $expiration )
    1491                                 add_site_option( $transient_timeout, time() + $expiration );
    1492                         $result = add_site_option( $option, $value );
     1622                                add_network_option( $transient_timeout, time() + $expiration );
     1623                        $result = add_network_option( $option, $value );
    14931624                } else {
    14941625                        if ( $expiration )
    1495                                 update_site_option( $transient_timeout, time() + $expiration );
    1496                         $result = update_site_option( $option, $value );
     1626                                update_network_option( $transient_timeout, time() + $expiration );
     1627                        $result = update_network_option( $option, $value );
    14971628                }
    14981629        }
    14991630        if ( $result ) {