Удаляет все просроченные временные опции (транзитные опции).
Удаление временных опций позволит очистить таблицу опций в БД. Иногда плагины хранят данные во временных опциях, но не удаляют их и может случится так, что таких данных станет очень много.
Запуск этой функции не приносит сайту никакого вреда.
Ничего не делает, если на сайте используется плагин объектного кэширования и параметр $force_db отключен (по умолчанию отключен).
С версии WP 3.7 просроченные транзитные опции автоматически удаляются при обновлении WordPress (апгрейде базы данных WordPress).
С версии 4.9 эта функция по умолчанию повешена на крон и выполняется каждый день.
О временных опциях читайте в описании функции set_transient().
Хуков нет.
Возвращает
null. Ничего (null)
Использование
delete_expired_transients( $force_db = false );
$force_db(логический)
Если установить в true, то временные опции будут принудительно удаляться из БД, даже если используется плагин объектного кэширования. По умолчанию: false
Примеры
0
#1 Удалим все временные опции, время жизни которых истекло
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() ) {
// Single site 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()
)
);
}
}