Что такое WordPress Transients и зачем они нужны
Transients — это встроенный механизм кэширования в WordPress, позволяющий временно сохранять данные в базе данных с заданным временем жизни. Они особенно полезны для хранения результатов дорогостоящих запросов к базе данных, внешних API или сложных вычислений. Благодаря transients можно значительно снизить нагрузку на сервер и ускорить загрузку страниц.
В отличие от обычных опций, transients автоматически удаляются после истечения срока, что избавляет от необходимости вручную очищать кэш. Это идеальное решение для хранения временных данных с предсказуемым временем жизни.
Например, если ваш сайт запрашивает данные с внешнего сервиса погоды, можно сохранить ответ в transient на 1 час и не делать запрос при каждом посещении страницы.
Как работать с Transients — основные функции WordPress
Основные функции для работы с transient в WordPress:
set_transient( $transient, $value, $expiration )— сохраняет данные в кэш на время$expirationв секундах.get_transient( $transient )— получает данные из кэша. Если срок жизни истек, возвращаетfalse.delete_transient( $transient )— удаляет transient из базы данных.
Рассмотрим на примере:
function wpabout_get_expensive_data() {
$cache_key = 'wpabout_expensive_query';
$cached = get_transient( $cache_key );
if ( false !== $cached ) {
return $cached; // Возвращаем кэшированные данные
}
// Здесь выполняем сложный запрос или вычисления
$data = wpabout_expensive_db_query();
// Сохраняем в transient на 1 час
set_transient( $cache_key, $data, HOUR_IN_SECONDS );
return $data;
}
function wpabout_expensive_db_query() {
global $wpdb;
return $wpdb->get_results("SELECT * FROM {$wpdb->prefix}posts WHERE post_type = 'product' AND post_status = 'publish'", OBJECT);
}Таким образом, при первом вызове функция wpabout_get_expensive_data выполняет тяжелый запрос к базе, а последующие — возвращают данные из кэша, экономя ресурсы.
Практические примеры использования Transients на сайте
Кэширование результатов внешнего API
Предположим, вы обращаетесь к внешнему API для получения курса валют или новостей. Чтобы не перегружать сервер и не превышать лимиты API, кэшируйте ответы в transients.
function wpabout_get_exchange_rates() {
$cache_key = 'wpabout_exchange_rates';
$rates = get_transient( $cache_key );
if ( false !== $rates ) {
return $rates;
}
$response = wp_remote_get( 'https://api.exchangeratesapi.io/latest' );
if ( is_wp_error( $response ) ) {
return false;
}
$body = wp_remote_retrieve_body( $response );
$data = json_decode( $body, true );
if ( ! empty( $data['rates'] ) ) {
set_transient( $cache_key, $data['rates'], 12 * HOUR_IN_SECONDS );
return $data['rates'];
}
return false;
}Здесь курсы валют кэшируются на 12 часов и не запрашиваются при каждом обновлении страницы.
Кэширование виджетов и фрагментов страниц
Если у вас есть виджет с динамическими данными — например, список популярных постов, можно кэшировать HTML-разметку, чтобы не выполнять лишних запросов:
function wpabout_popular_posts_widget() {
$cache_key = 'wpabout_popular_posts_html';
$cached_html = get_transient( $cache_key );
if ( false !== $cached_html ) {
echo $cached_html;
return;
}
$popular_posts = get_posts( [
'posts_per_page' => 5,
'meta_key' => 'wp_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
] );
ob_start();
echo '<ul>';
foreach ( $popular_posts as $post ) {
echo '<li><a href="' . get_permalink( $post ) . '">' . esc_html( get_the_title( $post ) ) . '</a></li>';
}
echo '</ul>';
$html = ob_get_clean();
set_transient( $cache_key, $html, 30 * MINUTE_IN_SECONDS );
echo $html;
}Это ускорит вывод виджета, особенно если запросы к базе тяжелые.
Советы по работе с Transients: эффективное кэширование и очистка
Важно разумно выбирать время жизни transient. Если оно слишком короткое — кэш неэффективен, слишком длинное — данные устареют. Например, для курсов валют подойдут часы, для новостных лент — минуты.
Для очистки transient можно использовать функцию delete_transient() вручную или при определённых событиях, например, при обновлении данных:
function wpabout_clear_exchange_cache() {
delete_transient( 'wpabout_exchange_rates' );
}
add_action( 'save_post', 'wpabout_clear_exchange_cache' );Также стоит помнить, что на некоторых хостингах transients могут храниться в памяти (например, с помощью Memcached), что повышает производительность.
Плагины для управления Transients и кэшированием в WordPress
Если вы не хотите писать свой код, можно использовать плагины для работы с transient и кэшированием:
- Transient Manager — позволяет просматривать, удалять и управлять всеми transient из админ-панели.
- WP Rocket — мощный плагин кэширования с поддержкой управления transient и очистки кэша.
- Redis Object Cache — использует Redis для хранения transient и объектного кэша, значительно ускоряя сайт.
Эти инструменты помогут контролировать кэш и избегать проблем со старыми или повреждёнными данными.
Заключение по теме использования Transients в WordPress
Transients — мощный и удобный механизм для временного кэширования данных в WordPress. Они позволяют значительно снижать нагрузку на сервер и ускорять загрузку страниц без сложных настроек. При правильном использовании transient помогут сделать ваш сайт более отзывчивым и масштабируемым.
Рекомендуется использовать transients для кэширования результатов сложных запросов, внешних API и динамических виджетов. Не забывайте выбирать подходящее время жизни и обеспечивать очистку устаревших данных.