Transients: Clear expired transients from the database in a daily cron task.
Fixes #41699 Built from https://develop.svn.wordpress.org/trunk@41963 git-svn-id: http://core.svn.wordpress.org/trunk@41797 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
@@ -816,6 +816,61 @@ function set_transient( $transient, $value, $expiration = 0 ) {
|
||||
return $result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deletes all expired transients.
|
||||
*
|
||||
* The multi-table delete syntax is used to delete the transient record
|
||||
* from table a, and the corresponding transient_timeout record from table b. +
|
||||
*
|
||||
* @since 4.9.0
|
||||
*
|
||||
* @param bool $force_db Optional. Force cleanup to run against the database even when an external object cache is used.
|
||||
*/
|
||||
function delete_expired_transients( $force_db = false) {
|
||||
global $wpdb;
|
||||
|
||||
if ( ! $force_db && wp_using_ext_object_cache() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
$wpdb->query( $wpdb->prepare(
|
||||
"DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b
|
||||
WHERE a.option_name LIKE %s
|
||||
AND a.option_name NOT LIKE %s
|
||||
AND b.option_name = CONCAT( '_transient_timeout_', SUBSTRING( a.option_name, 12 ) )
|
||||
AND b.option_value < %d",
|
||||
$wpdb->esc_like( '_transient_' ) . '%',
|
||||
$wpdb->esc_like( '_transient_timeout_' ) . '%',
|
||||
time()
|
||||
) );
|
||||
|
||||
if ( ! is_multisite() ) {
|
||||
// non-Multisite stores site transients in the options table.
|
||||
$wpdb->query( $wpdb->prepare(
|
||||
"DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b
|
||||
WHERE a.option_name LIKE %s
|
||||
AND a.option_name NOT LIKE %s
|
||||
AND b.option_name = CONCAT( '_site_transient_timeout_', SUBSTRING( a.option_name, 17 ) )
|
||||
AND b.option_value < %d",
|
||||
$wpdb->esc_like( '_site_transient_' ) . '%',
|
||||
$wpdb->esc_like( '_site_transient_timeout_' ) . '%',
|
||||
time()
|
||||
) );
|
||||
} elseif ( is_multisite() && is_main_site() && is_main_network() ) {
|
||||
// Multisite stores site transients in the sitemeta table.
|
||||
$wpdb->query( $wpdb->prepare(
|
||||
"DELETE a, b FROM {$wpdb->sitemeta} a, {$wpdb->sitemeta} b
|
||||
WHERE a.meta_key LIKE %s
|
||||
AND a.meta_key NOT LIKE %s
|
||||
AND b.meta_key = CONCAT( '_site_transient_timeout_', SUBSTRING( a.meta_key, 17 ) )
|
||||
AND b.meta_value < %d",
|
||||
$wpdb->esc_like( '_site_transient_' ) . '%',
|
||||
$wpdb->esc_like( '_site_transient_timeout_' ) . '%',
|
||||
time()
|
||||
) );
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves and restores user interface settings stored in a cookie.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user