Функция delete_expired_transients()
в WordPress предназначена для удаления всех просроченных транзиентов из базы данных. Это полезно для оптимизации работы сайта, так как старые данные не накапливаются и не занимают место в таблице опций, а это помогает поддерживать базу данных в чистоте и уменьшать нагрузку на сервер.
delete_expired_transients( bool $force_db = false )
Параметры
- $force_db (логический) (опционально) — Заставляет функцию удалять просроченные транзиенты непосредственно из базы данных, даже если на сайте установлен внешний кэш. По умолчанию —
false
.
Возвращаемое значение
- Функция возвращает
null
(ничего).
Как работает delete_expired_transients()
WordPress автоматически удаляет просроченные транзиенты в фоновом режиме, начиная с версии 4.9, выполняя эту задачу через крон каждую ночь. Это помогает поддерживать чистоту базы данных без дополнительной нагрузки на сайт. Тем не менее, можно принудительно вызвать функцию delete_expired_transients()
в случае, если вам необходимо сразу очистить просроченные транзиенты.
Пример 1: Очистка всех просроченных транзиентов вручную
Если на сайте включено объектное кэширование, вызов функции без параметров ничего не сделает. Однако вы можете установить параметр $force_db
в true
, чтобы очистить просроченные транзиенты даже при активированном кэше.
// Принудительное удаление всех просроченных транзиентов из базы данных
delete_expired_transients( true );
Этот код гарантирует удаление просроченных транзиентов напрямую из базы данных, обходя внешний кэш, если он активен.
Пример 2: Настройка пользовательского крон-задания для удаления транзиентов
Для регулярного удаления просроченных транзиентов можно создать собственное крон-задание. Например, если вы хотите, чтобы транзиенты удалялись каждые 12 часов, можно добавить следующее:
// Регистрация крон-задания
if ( ! wp_next_scheduled( 'custom_delete_expired_transients' ) ) {
wp_schedule_event( time(), 'twicedaily', 'custom_delete_expired_transients' );
}
// Создаем обработчик для удаления транзиентов
add_action( 'custom_delete_expired_transients', 'force_delete_expired_transients' );
function force_delete_expired_transients() {
delete_expired_transients( true );
}
Этот код добавит событие, которое будет срабатывать каждые 12 часов и удалять все просроченные транзиенты, даже если используется объектный кэш.
Пример 3: Очистка транзиентов при обновлении базы данных
В некоторых случаях полезно очищать транзиенты после обновления базы данных сайта. Например, можно добавить очистку транзиентов в функцию, которая вызывается при обновлении данных:
function update_database_and_clear_cache() {
// Здесь выполняются обновления базы данных
// После обновления удаляем просроченные транзиенты
delete_expired_transients();
}
// Запускаем функцию при обновлении базы данных
add_action( 'wp_upgrade_database', 'update_database_and_clear_cache' );
Этот код гарантирует, что после обновления базы данных удаляются все устаревшие транзиенты, что минимизирует шанс использования устаревших данных.
Заключение
Функция delete_expired_transients()
является важным инструментом для управления транзиентами и поддержания чистоты базы данных. С её помощью можно автоматически и вручную удалять просроченные данные, улучшая производительность сайта и снижая нагрузку на базу данных.