Properly unset notoptions cache in add_option() so that get_option() and update_option() work on the same load. fixes #4429 for 2.2.x

git-svn-id: http://svn.automattic.com/wordpress/branches/2.2@5789 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
markjaquith 2007-07-07 04:08:04 +00:00
parent 231a8a10ab
commit b10d4e3ade
1 changed files with 11 additions and 6 deletions

View File

@ -354,16 +354,14 @@ function add_option($name, $value = '', $description = '', $autoload = 'yes') {
wp_protect_special_option($name); wp_protect_special_option($name);
// Make sure the option doesn't already exist we can check the cache before we ask for a db query // Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
$notoptions = wp_cache_get('notoptions', 'options'); $notoptions = wp_cache_get('notoptions', 'options');
if ( is_array($notoptions) && isset($notoptions[$name]) ) { if ( !is_array($notoptions) || !isset($notoptions[$name]) )
unset($notoptions[$name]); if ( false !== get_option($name) )
wp_cache_set('notoptions', $notoptions, 'options');
} elseif ( false !== get_option($name) ) {
return; return;
}
$value = maybe_serialize($value); $value = maybe_serialize($value);
$autoload = ( 'no' === $autoload ) ? 'no' : 'yes';
if ( 'yes' == $autoload ) { if ( 'yes' == $autoload ) {
$alloptions = wp_load_alloptions(); $alloptions = wp_load_alloptions();
@ -373,6 +371,13 @@ function add_option($name, $value = '', $description = '', $autoload = 'yes') {
wp_cache_set($name, $value, 'options'); wp_cache_set($name, $value, 'options');
} }
// This option exists now
$notoptions = wp_cache_get('notoptions', 'options'); // yes, again... we need it to be fresh
if ( is_array($notoptions) && isset($notoptions[$name]) ) {
unset($notoptions[$name]);
wp_cache_set('notoptions', $notoptions, 'options');
}
$name = $wpdb->escape($name); $name = $wpdb->escape($name);
$value = $wpdb->escape($value); $value = $wpdb->escape($value);
$description = $wpdb->escape($description); $description = $wpdb->escape($description);