Transient API в WordPress — это мощный инструмент для хранения временных данных в базе данных с заданным временем жизни. Однако иногда возникает задача хранить данные длительно и эффективно, используя преимущества transient cache, но без частого удаления. В этой статье мы подробно рассмотрим, как создавать и управлять "постоянными" или длительно сохраняемыми transient-данными, используя особенности WordPress, а также предложим примеры кода и рекомендации по плагинам для оптимизации.
Что такое Transient Cache и зачем его использовать?
Transient Cache — это механизм кеширования в WordPress, позволяющий временно сохранять данные с указанием срока жизни (expiration time). Это помогает уменьшить количество запросов к базе данных или внешним API, ускорить загрузку страниц и снизить нагрузку на сервер.
По умолчанию transient-данные удаляются автоматически после истечения срока, но иногда нужно хранить данные дольше или даже без срока. Такой подход помогает, например, сохранять результаты тяжёлых вычислений или запроса к API без необходимости их постоянного пересчёта.
Ограничения и особенности transient cache
- Данные сохраняются в таблице
wp_options(или аналогичной в префиксе). - Для хранения с нулевым сроком жизни transient считается бессрочным.
- Некоторые хостинги могут очищать transient-данные автоматически.
- Для оптимальной работы важно контролировать очистку устаревших транзиентов.
Как создать "постоянный" transient без срока жизни в WordPress
Чтобы сохранить transient без автоматического удаления, достаточно установить время жизни равным 0. Вот функция, которая создаёт такой transient:
function wpcore_set_permanent_transient($key, $value) {
set_transient($key, $value, 0); // 0 — бессрочный transient
}
Использование:
wpcore_set_permanent_transient('my_permanent_data', array('foo' => 'bar'));
Получить его можно стандартной функцией get_transient:
$data = get_transient('my_permanent_data');
При таком подходе данные будут храниться в базе до момента их явного удаления.
Удаление "постоянного" transient
Чтобы удалить такой transient, используется функция:
delete_transient('my_permanent_data');
Важно контролировать количество таких данных, чтобы не засорять базу.
Пример практического использования persistent transient cache
Рассмотрим пример, когда необходимо сохранить результаты внешнего API-запроса, который обновляется не чаще одного раза в месяц.
function wpcore_get_external_api_data() {
$cache_key = 'wpcore_external_api_data';
$data = get_transient($cache_key);
if ($data === false) {
// Выполняем запрос к API
$response = wp_remote_get('https://api.example.com/data');
if (is_wp_error($response)) {
return null; // Обработка ошибки
}
$body = wp_remote_retrieve_body($response);
$data = json_decode($body, true);
if ($data) {
// Сохраняем данные с временем жизни 30 дней
set_transient($cache_key, $data, 30 * DAY_IN_SECONDS);
}
}
return $data;
}
Если же данные менять не нужно, можно сохранить их без срока, а обновлять вручную, например, через CRON или админ-панель.
Плагины для работы с Transient Cache и оптимизации кеширования
Для более удобного управления кешем и очистки transient-данных можно использовать плагины:
- Transient Manager — позволяет просматривать, фильтровать и удалять transient-ключи прямо из админки.
- Clearfy Pro — содержит инструменты для оптимизации кеша и очистки базы данных, включая управление transient.
Рекомендации по оптимизации и безопасности при использовании transient cache
При работе с transient важно учитывать следующие моменты:
- Не храните в transient слишком большие объёмы данных — это может замедлить запросы к базе.
- Используйте уникальные и понятные ключи, чтобы избежать конфликтов.
- Если данные чувствительны, рассмотрите шифрование перед сохранением.
- Регулярно очищайте устаревшие или неиспользуемые transient, чтобы не загромождать базу данных.
- Используйте плагин Clearfy Pro для автоматической очистки и оптимизации.
Автоматическая очистка устаревших transient с помощью WP-Cron
Если требуется реализовать собственную очистку transient, можно создать CRON-задачу, которая будет удалять ненужные ключи:
function wpcore_delete_old_transients() {
global $wpdb;
$time = time();
$transients = $wpdb->get_col($wpdb->prepare(
"SELECT option_name FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d",
$time
));
foreach ($transients as $timeout_key) {
$transient_key = str_replace('_transient_timeout_', '', $timeout_key);
delete_transient($transient_key);
}
}
// Запуск через CRON
if (!wp_next_scheduled('wpcore_cron_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpcore_cron_cleanup');
}
add_action('wpcore_cron_cleanup', 'wpcore_delete_old_transients');
Заключение по использованию persistent transient cache в WordPress
Transient API — это гибкий инструмент, который при правильном использовании позволяет значительно повысить производительность сайта. Создание "постоянных" transient с нулевым временем жизни помогает хранить данные длительно без лишних затрат на постоянное считывание и пересчет.
Используйте представленные функции и рекомендации, а также поддерживайте чистоту базы при помощи специализированных плагинов, например, Clearfy Pro, чтобы обеспечить стабильную и быструю работу вашего WordPress-сайта.