Transient API в WordPress — мощный инструмент для временного кеширования данных с установленным временем жизни. Однако зачастую старые или устаревшие transient остаются в базе данных, перегружая её и замедляя работу сайта. В этой статье мы подробно разберём, как правильно автоматизировать удаление устаревших transient, чтобы поддерживать базу данных в чистоте и улучшать производительность.
Что такое transient и почему их нужно удалять
Transient — это временные данные, сохраняющиеся в базе данных WordPress с определённым временем жизни (TTL). Они используются для кеширования запросов API, результатов сложных вычислений, данных с внешних сервисов и т.д. После истечения TTL transient считается устаревшим и должен быть удалён.
Если не удалять просроченные transient, они накапливаются в таблице wp_options, увеличивая размер базы и замедляя запросы. Особенно это критично для сайтов с большим трафиком и множеством плагинов, активно использующих transient.
Поэтому важно автоматизировать очистку старых transient с помощью WP-Cron или сторонних плагинов.
Как вручную удалить старые transient через SQL-запрос
Для проверки и удаления устаревших transient можно использовать SQL-запросы к базе. В таблице wp_options transient хранятся с ключами, начинающимися на _transient_ или _transient_timeout_. Вторая группа содержит время истечения TTL.
Пример запроса для удаления всех просроченных transient:
DELETE o1 FROM wp_options o1
INNER JOIN wp_options o2 ON o1.option_name = REPLACE(o2.option_name, '_timeout', '')
WHERE o2.option_name LIKE '_transient_timeout_%'
AND o2.option_value < UNIX_TIMESTAMP();
Этот запрос удалит все transient, у которых время истечения прошло. Однако выполнять его регулярно вручную неудобно, поэтому рассмотрим автоматизацию.
Автоматизация удаления устаревших transient с помощью WP-Cron
WP-Cron — встроенный механизм планировщика задач в WordPress. Мы можем создать функцию, которая будет запускаться по расписанию и очищать просроченные transient.
Регистрация и реализация функции удаления
Добавьте следующий код в файл functions.php вашей темы или в собственный плагин:
function wpdetect_clear_expired_transients() {
global $wpdb;
$time = time();
$transient_timeout_name = $wpdb->esc_like('_transient_timeout_') . '%';
// Получаем все устаревшие transient
$expired = $wpdb->get_col($wpdb->prepare(
"SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s AND option_value < %d",
$transient_timeout_name,
$time
));
if (empty($expired)) {
return;
}
foreach ($expired as $timeout_name) {
$transient_name = str_replace('_transient_timeout_', '_transient_', $timeout_name);
// Удаляем transient и его timeout
delete_option($transient_name);
delete_option($timeout_name);
}
}
// Регистрируем событие при активации темы или плагина
function wpdetect_schedule_transient_cleanup() {
if (!wp_next_scheduled('wpdetect_transient_cleanup_hook')) {
wp_schedule_event(time(), 'hourly', 'wpdetect_transient_cleanup_hook');
}
}
add_action('wp', 'wpdetect_schedule_transient_cleanup');
// Хук для очистки
add_action('wpdetect_transient_cleanup_hook', 'wpdetect_clear_expired_transients');
Объяснение:
- Функция
wpdetect_clear_expired_transientsищет все transient с истекшим TTL и удаляет их. - При загрузке сайта (хук
wp) регистрируем задачу планировщика, если она ещё не запланирована. - Задача запускается ежечасно и выполняет очистку.
Использование плагинов для автоматической очистки transient
Если вы не хотите писать код, можно использовать плагины, которые управляют transient и кешем. Вот несколько полезных:
- Transient Cleaner — простой плагин для поиска и удаления устаревших transient через админку.
- WP Rocket — мощный кеш-плагин с опцией автоматического управления transient.
- Clearfy Pro (https://wpshop.ru/plugins/clearfy/?utm_source=wpdetect.ru&utm_medium=article&utm_campaign=kak-avtomatizirovat-udaleniye-starogo-transient-v-wordpress) — набор оптимизаций для WordPress, включая работу с transient и другим кешем.
Для большинства сайтов достаточно встроенного решения на WP-Cron, но при сложных сценариях и большом трафике стоит рассмотреть специализированные плагины.
Дополнительные рекомендации по работе с transient
Чтобы избежать накопления устаревших transient, следуйте рекомендациям:
- Используйте правильное время жизни — не ставьте очень большой TTL у transient, если данные быстро устаревают.
- Периодически запускайте очистку transient, особенно на сайтах с интенсивным использованием кеша.
- Проверяйте плагины на предмет корректного удаления transient после обновлений или удаления данных.
- Используйте WP-CLI для быстрой очистки transient через командную строку:
wp transient delete --expired.
Заключение
Автоматизация удаления старого transient — важный этап поддержки производительности WordPress-сайта. Используя WP-Cron и приведённый пример кода, вы легко создадите надёжный механизм очистки, который избавит базу данных от мусора и ускорит работу сайта. В качестве альтернативы рассмотрите плагины, такие как Clearfy Pro, для более комплексной оптимизации.