Transient API — это мощный инструмент в WordPress для кэширования временных данных с определённым сроком жизни. Однако при неправильном использовании или из-за ошибок в коде transientы могут оставаться в базе данных и накапливаться, что замедляет сайт и увеличивает нагрузку на базу данных. В этой статье разберём, как автоматизировать удаление старых transient, чтобы поддерживать чистоту базы и улучшать производительность WordPress.
Что такое transient и почему важно удалять устаревшие записи
Transient — это временный кэш, который хранится в базе данных WordPress или в объектном кэше. Они используются для сокращения времени выполнения тяжёлых запросов и операций, например, при работе с API, сложными вычислениями или генерацией больших данных.
Каждый transient имеет ключ, значение и время жизни (TTL). Когда TTL заканчивается, transient считается устаревшим и должен быть удалён, но иногда этого не происходит из-за ошибок в плагинах или темах. Со временем количество устаревших transient растёт, что приводит к:
- увеличению размера базы данных;
- замедлению запросов к базе;
- повышенной нагрузке на сервер.
Автоматизация удаления старых transient поможет избежать этих проблем без необходимости вручную чистить базу.
Автоматическое удаление устаревших transient с помощью WP-Cron
Для автоматизации можно использовать WP-Cron — встроенный планировщик задач WordPress. Создадим функцию, которая будет искать и удалять старые transient и запускать её по расписанию.
Создание функции удаления старых transient
function wpdetect_delete_expired_transients() {
global $wpdb;
$time = time();
// Получаем все transient, у которых время истекло
$expired = $wpdb->get_col(
"SELECT option_name FROM $wpdb->options
WHERE option_name LIKE '_transient_timeout_%' AND option_value < $time"
);
if (empty($expired)) {
return;
}
foreach ($expired as $timeout_option) {
// Название transient без префикса _transient_timeout_
$transient_name = str_replace('_transient_timeout_', '', $timeout_option);
// Удаляем transient и его время жизни
delete_transient($transient_name);
}
}
Эта функция ищет в таблице опций все ключи с устаревшим временем жизни и удаляет соответствующие transientы.
Регистрация задачи WP-Cron
Добавим событие, которое будет вызывать нашу функцию, например, раз в сутки.
function wpdetect_schedule_transient_cleanup() {
if (!wp_next_scheduled('wpdetect_cleanup_transients_hook')) {
wp_schedule_event(time(), 'daily', 'wpdetect_cleanup_transients_hook');
}
}
add_action('wp', 'wpdetect_schedule_transient_cleanup');
add_action('wpdetect_cleanup_transients_hook', 'wpdetect_delete_expired_transients');
Теперь WordPress будет запускать очистку устаревших transient каждый день.
Дополнительные советы и плагины для работы с transient
Если не хочется писать код, можно использовать плагины для управления transient:
- Clearfy Pro — в числе множества функций есть оптимизация transient и автоматическая очистка устаревших кэшей.
- WP Rocket — популярный кэш-плагин с поддержкой transient, позволяет управлять временем жизни и очисткой.
В любом случае, если у вас сложный сайт, стоит регулярно проверять базу данных на предмет множества старых transient и очищать их вручную или автоматизировать процесс. Для этого можно использовать запросы к базе напрямую или WP-CLI:
wp transient delete-expired
Эта команда удалит все устаревшие transient из базы и освободит место.
Как избежать накопления устаревших transient: лучшие практики
Чтобы transient не накапливались и не создавали проблем:
- Всегда задавайте разумное время жизни transient, не делайте TTL слишком большим.
- Используйте функции WordPress
set_transientиdelete_transientкорректно, избегайте дублирования ключей transient. - При удалении или обновлении данных, связанных с transient, обязательно очищайте соответствующие transient.
- Тестируйте плагины и темы на предмет правильного использования transient, чтобы не создавать «мусор».
Если transientы используются для кэширования внешних API, убедитесь, что после обновления данных они своевременно удаляются.
Заключение по автоматизации удаления transient в WordPress
Автоматизация очистки устаревших transient — важный аспект поддержки производительности сайта на WordPress. С помощью приведённого кода и WP-Cron вы можете настроить регулярную чистку базы данных от неактуальных записей. Это поможет снизить нагрузку на сервер и ускорить работу ресурса.
Если хотите более готовые решения, обратите внимание на плагины, например, Clearfy Pro, который дополнительно оптимизирует transient и многое другое.
Используйте правильные инструменты и подходы, чтобы WordPress работал быстро и стабильно!