Transient API в WordPress — мощный инструмент для временного хранения данных в базе данных с автоматическим сроком жизни. Он помогает ускорять сайт, кэшируя результаты дорогих запросов и операций. Но со временем в базе накапливаются устаревшие, неиспользуемые transient-записи, которые влияют на производительность и размер базы данных. В этой статье разберем, как автоматизировать удаление таких данных, чтобы база оставалась чистой и производительность — высокой.
Что такое Transient API и зачем удалять устаревшие transient?
Transient API — это специальный механизм WordPress для временного хранения данных с установкой срока действия. Он похож на опции, но с ограничением времени жизни. Например, можно кэшировать результаты запроса к внешнему API на 12 часов, чтобы не нагружать сервер.
Когда срок жизни transient заканчивается, он считается устаревшим. Однако фактически запись в базе не удаляется автоматически, а помечается как просроченная. Это значит, что база данных становится загроможденной, что негативно влияет на скорость запросов.
Регулярное удаление просроченных transient помогает поддерживать базу в оптимальном состоянии, снижая нагрузку и ускоряя работу сайта.
Как вручную удалить устаревшие transient через код
WordPress не удаляет просроченные transient автоматически, но предоставляет функции для их очистки. Чтобы удалить все устаревшие transient, можно использовать следующий код:
function wpeditor_ru_delete_expired_transients() {
global $wpdb;
$time = time();
$transients = $wpdb->get_col( "
SELECT option_name FROM {$wpdb->options}
WHERE option_name LIKE '_transient_%_timeout'
AND option_value < $time
" );
foreach ( $transients as $timeout_key ) {
$transient = str_replace( '_transient_timeout_', '', $timeout_key );
delete_transient( $transient );
}
}
Этот код ищет в таблице опций все transient со сроком действия меньше текущего времени и удаляет их с помощью функции delete_transient. Это надежный способ очистить базу от просроченных данных.
Как добавить автоматическую очистку через cron
Чтобы автоматизировать удаление, стоит запланировать событие cron, которое будет запускать очистку, например, раз в сутки. Для этого добавляем в functions.php или плагин следующий код:
if ( ! wp_next_scheduled( 'wpeditor_ru_cron_delete_expired_transients' ) ) {
wp_schedule_event( time(), 'daily', 'wpeditor_ru_cron_delete_expired_transients' );
}
add_action( 'wpeditor_ru_cron_delete_expired_transients', 'wpeditor_ru_delete_expired_transients' );
Теперь каждый день функция удаления устаревших transient будет выполняться автоматически без вашего вмешательства.
Использование плагинов для управления transient
Если вы предпочитаете не писать код, есть плагины, которые помогут управлять transient:
- Transient Cleaner — позволяет удалять все устаревшие transient вручную и автоматизировать процесс.
- Clearfy Pro — расширенный инструмент оптимизации WordPress, который также умеет очищать transient и кэш.
Для примера, чтобы установить и настроить Transient Cleaner, достаточно скачать плагин с wpshop.ru, активировать и запустить очистку из админки.
Практические рекомендации по работе с transient
Для эффективного использования transient следуйте этим советам:
- Старайтесь указывать адекватное время жизни transient — слишком долгие сроки ведут к накоплению устаревших данных.
- Регулярно очищайте просроченные transient с помощью cron, чтобы база не раздувалась.
- Используйте transient для кэширования тяжелых и редко меняющихся данных, чтобы снизить нагрузку на сервер.
- Избегайте создания лишних transient, если данные можно получить быстрее другими способами.
Пример использования transient с функцией wpeditor_ru_set_custom_transient()
Рассмотрим простой пример создания transient с нашим префиксом для лучшей организации:
function wpeditor_ru_set_custom_transient( $key, $data, $expiration = 3600 ) {
$transient_key = 'wpeditor_ru_' . $key;
set_transient( $transient_key, $data, $expiration );
}
// Пример вызова
wpeditor_ru_set_custom_transient( 'external_api_data', $api_response, 7200 );
Такой подход позволяет легко найти и управлять transient, созданными вашим кодом, например, при поиске и удалении.