Add hooks across options and transients APIs. Focuses on site transients/options functions. Attempts to standardize where possible. See #10788

git-svn-id: https://develop.svn.wordpress.org/trunk@13148 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Andrew Nacin 2010-02-14 10:39:46 +00:00
parent 2bfeae67c6
commit 9d476c2d66
1 changed files with 54 additions and 18 deletions

View File

@ -345,7 +345,8 @@ function get_option( $option, $default = false ) {
if ( defined( 'WP_INSTALLING' ) ) if ( defined( 'WP_INSTALLING' ) )
$wpdb->suppress_errors( $suppress ); $wpdb->suppress_errors( $suppress );
if ( is_object( $row) ) { // Has to be get_row instead of get_var because of funkiness with 0, false, null values // Has to be get_row instead of get_var because of funkiness with 0, false, null values
if ( is_object( $row ) ) {
$value = $row->option_value; $value = $row->option_value;
wp_cache_add( $option, $value, 'options' ); wp_cache_add( $option, $value, 'options' );
} else { // option does not exist, so we must cache its non-existence } else { // option does not exist, so we must cache its non-existence
@ -479,6 +480,7 @@ function wp_load_core_site_options( $site_id = null ) {
* *
* @uses apply_filters() Calls 'pre_update_option_$option' hook to allow overwriting the * @uses apply_filters() Calls 'pre_update_option_$option' hook to allow overwriting the
* option value to be stored. * option value to be stored.
* @uses do_action() Calls 'update_option' hook before updating the option.
* @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success. * @uses do_action() Calls 'update_option_$option' and 'updated_option' hooks on success.
* *
* @param string $option Option name. Expected to not be SQL-escaped * @param string $option Option name. Expected to not be SQL-escaped
@ -511,7 +513,7 @@ function update_option( $option, $newvalue ) {
$_newvalue = $newvalue; $_newvalue = $newvalue;
$newvalue = maybe_serialize( $newvalue ); $newvalue = maybe_serialize( $newvalue );
do_action( 'update_option', $option, $oldvalue, $newvalue ); do_action( 'update_option', $option, $oldvalue, $newvalue ); // $newvalue may be serialized.
if ( ! defined( 'WP_INSTALLING' ) ) { if ( ! defined( 'WP_INSTALLING' ) ) {
$alloptions = wp_load_alloptions(); $alloptions = wp_load_alloptions();
if ( isset( $alloptions[$option] ) ) { if ( isset( $alloptions[$option] ) ) {
@ -550,6 +552,7 @@ function update_option( $option, $newvalue ) {
* @since 1.0.0 * @since 1.0.0
* @link http://alex.vort-x.net/blog/ Thanks Alex Stapleton * @link http://alex.vort-x.net/blog/ Thanks Alex Stapleton
* *
* @uses do_action() Calls 'add_option' hook before adding the option.
* @uses do_action() Calls 'add_option_$option' and 'added_option' hooks on success. * @uses do_action() Calls 'add_option_$option' and 'added_option' hooks on success.
* *
* @param string $option Name of option to add. Expects to NOT be SQL escaped. * @param string $option Name of option to add. Expects to NOT be SQL escaped.
@ -608,14 +611,14 @@ function add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' )
* Removes option by name. Prevents removal of protected WordPress options. * Removes option by name. Prevents removal of protected WordPress options.
* *
* @package WordPress * @package WordPress
* @subpackage Option * @subpackage Option
* @since 1.2.0 * @since 1.2.0
* *
* @uses do_action() Calls 'delete_option' hook before option is deleted. * @uses do_action() Calls 'delete_option' hook before option is deleted.
* @uses do_action() Calls 'deleted_option' hook on success. * @uses do_action() Calls 'deleted_option' and 'delete_option_$option' hooks on success.
* *
* @param string $option Name of option to remove. * @param string $option Name of option to remove.
* @return bool True, if succeed. False, if failure. * @return bool True, if option is successfully deleted. False on failure.
*/ */
function delete_option( $option ) { function delete_option( $option ) {
global $wpdb; global $wpdb;
@ -642,6 +645,7 @@ function delete_option( $option ) {
} }
} }
if ( $result ) { if ( $result ) {
do_action( "delete_option_$option", $option );
do_action( 'deleted_option', $option ); do_action( 'deleted_option', $option );
return true; return true;
} }
@ -655,20 +659,27 @@ function delete_option( $option ) {
* @package WordPress * @package WordPress
* @subpackage Transient * @subpackage Transient
* *
* @uses do_action() Calls 'delete_transient_$transient' hook before transient is deleted.
* @uses do_action() Calls 'deleted_transient' hook on success.
*
* @param string $transient Transient name. Expected to not be SQL-escaped * @param string $transient Transient name. Expected to not be SQL-escaped
* @return bool true if successful, false otherwise * @return bool true if successful, false otherwise
*/ */
function delete_transient( $transient ) { function delete_transient( $transient ) {
global $_wp_using_ext_object_cache; global $_wp_using_ext_object_cache;
do_action( 'delete_transient_' . $transient ); do_action( 'delete_transient_' . $transient, $transient );
if ( $_wp_using_ext_object_cache ) { if ( $_wp_using_ext_object_cache ) {
return wp_cache_delete( $transient, 'transient' ); $result = wp_cache_delete( $transient, 'transient' );
} else { } else {
$transient = '_transient_' . esc_sql( $transient ); $option = '_transient_' . esc_sql( $transient );
return delete_option( $transient ); $result = delete_option( $option );
} }
if ( $result )
do_action( 'deleted_transient', $transient );
return $result;
} }
/** /**
@ -733,6 +744,7 @@ function get_transient( $transient ) {
* *
* @uses apply_filters() Calls 'pre_set_transient_$transient' hook to allow overwriting the * @uses apply_filters() Calls 'pre_set_transient_$transient' hook to allow overwriting the
* transient value to be stored. * transient value to be stored.
* @uses do_action() Calls 'set_transient_$transient' and 'setted_transient' hooks on success.
* *
* @param string $transient Transient name. Expected to not be SQL-escaped * @param string $transient Transient name. Expected to not be SQL-escaped
* @param mixed $value Transient value. * @param mixed $value Transient value.
@ -745,7 +757,7 @@ function set_transient( $transient, $value, $expiration = 0 ) {
$value = apply_filters( 'pre_set_transient_' . $transient, $value ); $value = apply_filters( 'pre_set_transient_' . $transient, $value );
if ( $_wp_using_ext_object_cache ) { if ( $_wp_using_ext_object_cache ) {
return wp_cache_set( $transient, $value, 'transient', $expiration ); $result = wp_cache_set( $transient, $value, 'transient', $expiration );
} else { } else {
$transient_timeout = '_transient_timeout_' . $transient; $transient_timeout = '_transient_timeout_' . $transient;
$transient = '_transient_' . $transient; $transient = '_transient_' . $transient;
@ -754,15 +766,20 @@ function set_transient( $transient, $value, $expiration = 0 ) {
$autoload = 'yes'; $autoload = 'yes';
if ( $expiration ) { if ( $expiration ) {
$autoload = 'no'; $autoload = 'no';
add_option($transient_timeout, time() + $expiration, '', 'no'); add_option( $transient_timeout, time() + $expiration, '', 'no' );
} }
return add_option($transient, $value, '', $autoload); $result = add_option( $transient, $value, '', $autoload );
} else { } else {
if ( $expiration ) if ( $expiration )
update_option( $transient_timeout, time() + $expiration ); update_option( $transient_timeout, time() + $expiration );
return update_option($transient, $value); $result = update_option( $transient, $value );
} }
} }
if ( $result ) {
do_action( 'set_transient_' . $transient );
do_action( 'setted_transient', $transient );
}
return $result;
} }
/** /**
@ -3466,9 +3483,12 @@ function delete_site_option( $option ) {
$result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) ); $result = $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->sitemeta} WHERE meta_key = %s AND site_id = %d", $option, $wpdb->siteid ) );
} }
do_action( "delete_site_option_{$option}", $option ); if ( $result ) {
do_action( "delete_site_option", $option ); do_action( "delete_site_option_{$option}", $option );
return $result; do_action( "delete_site_option", $option );
return true;
}
return false;
} }
/** /**
@ -3525,18 +3545,24 @@ function update_site_option( $option, $value ) {
* @package WordPress * @package WordPress
* @subpackage Transient * @subpackage Transient
* *
* @uses do_action() Calls 'delete_site_transient_$transient' hook before transient is deleted.
* @uses do_action() Calls 'deleted_site_transient' hook on success.
*
* @param string $transient Transient name. Expected to not be SQL-escaped * @param string $transient Transient name. Expected to not be SQL-escaped
* @return bool True if successful, false otherwise * @return bool True if successful, false otherwise
*/ */
function delete_site_transient( $transient ) { function delete_site_transient( $transient ) {
global $_wp_using_ext_object_cache; global $_wp_using_ext_object_cache;
do_action( 'delete_site_transient_' . $transient, $transient );
if ( $_wp_using_ext_object_cache ) { if ( $_wp_using_ext_object_cache ) {
$result = wp_cache_delete( $transient, 'site-transient' ); $result = wp_cache_delete( $transient, 'site-transient' );
} else { } else {
$transient = '_site_transient_' . esc_sql( $transient ); $option = '_site_transient_' . esc_sql( $transient );
$result = delete_site_option( $transient ); $result = delete_site_option( $option );
} }
if ( $result )
do_action( 'deleted_site_transient', $transient );
return $result; return $result;
} }
@ -3600,6 +3626,10 @@ function get_site_transient( $transient ) {
* @package WordPress * @package WordPress
* @subpackage Transient * @subpackage Transient
* *
* @uses apply_filters() Calls 'pre_set_site_transient_$transient' hook to allow overwriting the
* transient value to be stored.
* @uses do_action() Calls 'set_site_transient_$transient' and 'setted_site_transient' hooks on success.
*
* @param string $transient Transient name. Expected to not be SQL-escaped * @param string $transient Transient name. Expected to not be SQL-escaped
* @param mixed $value Transient value. * @param mixed $value Transient value.
* @param int $expiration Time until expiration in seconds, default 0 * @param int $expiration Time until expiration in seconds, default 0
@ -3608,6 +3638,8 @@ function get_site_transient( $transient ) {
function set_site_transient( $transient, $value, $expiration = 0 ) { function set_site_transient( $transient, $value, $expiration = 0 ) {
global $_wp_using_ext_object_cache; global $_wp_using_ext_object_cache;
$value = apply_filters( 'pre_set_site_transient_' . $transient, $value );
if ( $_wp_using_ext_object_cache ) { if ( $_wp_using_ext_object_cache ) {
$result = wp_cache_set( $transient, $value, 'site-transient', $expiration ); $result = wp_cache_set( $transient, $value, 'site-transient', $expiration );
} else { } else {
@ -3624,6 +3656,10 @@ function set_site_transient( $transient, $value, $expiration = 0 ) {
$result = update_site_option( $transient, $value ); $result = update_site_option( $transient, $value );
} }
} }
if ( $result ) {
do_action( 'set_site_transient_' . $transient );
do_action( 'setted_site_transient', $transient );
}
return $result; return $result;
} }