Cache the non-existence of options to prevent redundant queries. props davidhouse. fixes #2268
git-svn-id: https://develop.svn.wordpress.org/trunk@4798 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
e03fb2e4eb
commit
58ee51abe9
@ -203,6 +203,10 @@ function is_serialized_string($data) {
|
||||
function get_option($setting) {
|
||||
global $wpdb;
|
||||
|
||||
// prevent non-existent options from triggering multiple queries
|
||||
if ( true === wp_cache_get($setting, 'notoptions') )
|
||||
return false;
|
||||
|
||||
$value = wp_cache_get($setting, 'options');
|
||||
|
||||
if ( false === $value ) {
|
||||
@ -215,7 +219,8 @@ function get_option($setting) {
|
||||
if( is_object( $row) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values
|
||||
$value = $row->option_value;
|
||||
wp_cache_set($setting, $value, 'options');
|
||||
} else {
|
||||
} else { // option does not exist, so we must cache its non-existence
|
||||
wp_cache_set($setting, true, 'notoptions');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -274,6 +279,9 @@ function update_option($option_name, $newvalue) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( true === wp_cache_get($option_name, 'notoptions') )
|
||||
wp_cache_delete($option_name, 'notoptions');
|
||||
|
||||
$_newvalue = $newvalue;
|
||||
$newvalue = maybe_serialize($newvalue);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user