Transient API в WordPress — мощный инструмент для временного кэширования данных и снижения нагрузки на сервер. Однако со временем накопленные устаревшие transient-данные могут занимать место в базе данных и замедлять работу сайта. В этой статье мы подробно разберём, как автоматизировать процесс удаления старых transient-значений, чтобы поддерживать базу данных в чистоте и улучшать производительность WordPress.
Что такое transient и зачем его удалять
Transient — это специальный тип временных данных, которые сохраняются в базе данных с указанием времени жизни (TTL). Они позволяют кэшировать результаты сложных запросов, внешних API вызовов и других операций, которые требуют ресурсов.
Однако иногда transient-данные не удаляются автоматически, если время жизни истекло, или плагины/темы оставляют их без очистки. Это приводит к накоплению "мертвых" записей в базе, что влияет на размер таблиц и скорость запросов.
Удаление устаревших transient-данных — важный этап оптимизации, особенно на сайтах с большим количеством кэшируемых данных.
Как работает удаление transient в WordPress
По стандарту WordPress сам удаляет просроченные transient при попытке их получения: если время жизни истекло, данные считаются недействительными и удаляются. Но если transient не запрашиваются, они остаются в базе.
Это значит, что для автоматической очистки нужно либо запускать регулярный скрипт, который удаляет устаревшие transient, либо использовать плагины, реализующие подобный функционал.
Где хранятся transient-данные
Transient-данные хранятся в таблице wp_options (или с префиксом вашей базы данных), с ключами, начинающимися на _transient_ и _transient_timeout_. Вторая часть отвечает за время жизни transient.
Реализация автоматического удаления transient с помощью WP Cron
Оптимальный способ — запускать периодическую задачу, которая удаляет все просроченные transient из базы.
Добавим в functions.php вашей темы или в кастомный плагин следующий код.
function wp24_delete_expired_transients() {
global $wpdb;
$time = time();
// Удаляем все transient, у которых истек таймаут
$transient_timeout_option_name = '_transient_timeout_';
$sql = $wpdb->prepare(
"DELETE a, b FROM {$wpdb->options} a, {$wpdb->options} b
WHERE a.option_name LIKE %s
AND b.option_name = CONCAT(%s, SUBSTRING(a.option_name, LENGTH(%s) + 1))
AND b.option_value < %d",
$transient_timeout_option_name . '%',
'_transient_',
'_transient_timeout_',
$time
);
$wpdb->query($sql);
}
// Регистрируем событие при активации темы или плагина
function wp24_schedule_transient_cleanup() {
if (!wp_next_scheduled('wp24_cron_delete_transients')) {
wp_schedule_event(time(), 'hourly', 'wp24_cron_delete_transients');
}
}
add_action('wp', 'wp24_schedule_transient_cleanup');
// Добавляем обработчик события
add_action('wp24_cron_delete_transients', 'wp24_delete_expired_transients');
// Очистка при деактивации плагина или смене темы
function wp24_clear_transient_cleanup_schedule() {
$timestamp = wp_next_scheduled('wp24_cron_delete_transients');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wp24_cron_delete_transients');
}
}Этот код создаёт задачу в WP Cron, которая ежечасно очищает устаревшие transient. Важно, что такая автоматизация не требует дополнительных вмешательств и работает на любом хостинге с поддержкой WP Cron.
Использование плагинов для очистки transient
Если вы предпочитаете готовые решения, можно использовать плагины, которые включают функционал очистки transient:
- Clearfy Pro — многофункциональный оптимизатор, в том числе умеет удалять устаревшие transient, очищать базу и кэш.
- WP-Optimize — популярный плагин для очистки базы данных, который также удаляет transient и ревизии.
- Transient Cleaner — специализированный плагин для удаления transient с возможностью запуска очистки вручную или по расписанию.
Пример ссылки на Clearfy Pro с utm метками для wp24.ru:
Clearfy Pro на WPSHOP.RU
Рекомендации по работе с transient
Чтобы эффективно использовать transient и поддерживать чистоту базы данных, следуйте простым рекомендациям:
- Всегда задавайте разумное время жизни transient, чтобы не хранить данные дольше, чем нужно.
- При обновлении данных явно удаляйте или обновляйте соответствующие transient.
- Используйте WP Cron для регулярной очистки устаревших transient, как показано в примере выше.
- Периодически проверяйте таблицу
wp_optionsна наличие большого количества transient с помощью SQL-запросов.
Как проверить количество transient в базе данных
Для оценки состояния transient выполните следующий SQL-запрос через phpMyAdmin или консоль:
SELECT COUNT(*) as total_transients FROM wp_options WHERE option_name LIKE '_transient_%';Если число слишком большое — пора применить очистку.
Выводы и практические советы
Transient — удобный способ кэширования в WordPress, но без контроля они могут привести к "засорению" базы и ухудшению производительности. Автоматизация удаления старых transient с помощью WP Cron и периодический аудит базы данных помогут вам поддерживать сайт в отличном состоянии.
Если вы используете темы из каталога WPSHOP, например, Reboot или Root, многие из них совместимы с оптимизирующими плагинами, что дополнительно облегчит управление кэшем и transient.