Удаление Истекших Временных Данных с помощью DELETE_EXPIRED_TRANSIENTS()
Функция DELETE_EXPIRED_TRANSIENTS()
позволяет удалить все истекшие временные данные (транзиенты) в WordPress. Эти временные данные могут занимать место в базе данных, если не будут очищены.
Важно понимать
Обратите внимание, что эта функция не будет работать, если используется сторонний объектный кэш. Если у вас настроен внешний кэш, вам нужно будет управлять кэшированием отдельно.
Возвращаемое значение
Функция ничего не возвращает (значение null
).
Использование функции
Функция вызывается следующим образом:
delete_expired_transients( $force_db );
Параметры:
- $force_db (boolean): Указывает, нужно ли принудительно выполнять очистку в базе данных даже при использовании внешнего объекта кеша. По умолчанию значение
false
.
Пример
Чтобы удалить все временные данные, которые истекли, вы можете использовать следующий код:
delete_expired_transients( true );
Важные заметки
- Глобальная переменная: Эта функция использует глобальный объект
$wpdb
, который представляет собой абстракцию базы данных в WordPress. Он позволяет взаимодействовать с базой данных удобным способом.
Изменения в версии
- С версии 4.9.0: Функция была введена в WordPress.
Код функции
Вот как выгляд��т код функции delete_expired_transients()
:
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() ) {
// В одиночном сайте временные данные хранятся в таблице опций.
$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() ) {
// В многосайтовом режиме временные данные хранятся в таблице sitemeta.
$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()
)
);
}
}
Связанные функции
delete_transient()
: Удаляет временные данные по заданному ключу.get_transient()
: Получает временные данные по заданному ключу.set_transient()
: Устанавливает временные данные с указанным сроком жизни.get_site_transient()
: Получает временные данные для сайта в многосайтовом режиме.set_site_transient()
: Устанавливает временные данные для сайта в многосайтовом режиме.
Эта статья должна помочь вам понять, как использовать функцию DELETE_EXPIRED_TRANSIENTS()
и повысить производительность вашего сайта WordPress, очищая устаревшие временные данные.