Функция get_site_transient()
используется в WordPress для получения временных опций (транзиентов) на уровне всей сети. Транзиенты позволяют сохранять временные данные, например результаты длительных запросов, чтобы оптимизировать производительность. В отличие от get_transient()
, которая работает для одиночного сайта, get_site_transient()
предназначена для использования в мультисайтовых установках, где требуется доступ к общим временным данным.
get_site_transient( string $transient ): mixed
get_site_transient()
возвращает значение заданной временной опции (транзиента) сети, если оно существует и не истекло. Если же транзиент отсутствует, истек или имеет пустое значение, функция вернет false
. Это удобно для проверки срока действия данных, кэшированных в сети.
Важно: Используйте
get_site_transient()
только для данных, которые нужны на уровне всей сети. Для кэширования на уровне одного сайта используйтеget_transient()
.
Параметры функции
$transient
(string): Название транзиента, значение которого требуется получить. Название не должно быть SQL-экранировано.
Возвращаемое значение
- mixed: Значение транзиента, если оно существует и не истекло, или
false
, если транзиент отсутствует или истек.
Пример 1: Кэширование данных для HTTP-запроса
Предположим, что данные, полученные по HTTP-запросу, используются на всех сайтах сети. Чтобы не делать лишних запросов, можно сохранить данные в транзиенте и использовать их повторно, пока они не устарели.
$transient_name = 'network_data_cache';
$network_data = get_site_transient( $transient_name );
if ( false === $network_data ) {
// Если данных в транзиенте нет, получаем их заново
$network_data = file_get_contents( 'https://example.com/api/data' );
// Сохраняем данные в транзиент на одну неделю
if ( $network_data ) {
set_site_transient( $transient_name, $network_data, WEEK_IN_SECONDS );
}
}
echo $network_data;
Пример 2: Проверка наличия обновлений для сети
Транзиенты удобны для хранения данных обновлений сети, которые обновляются по расписанию. В следующем примере данные об обновлениях кэшируются и извлекаются по мере необходимости.
$transient_name = 'network_updates';
$network_updates = get_site_transient( $transient_name );
if ( false === $network_updates ) {
// Запрашиваем данные об обновлениях
$network_updates = wp_remote_get( 'https://example.com/network-updates' );
if ( !is_wp_error( $network_updates ) ) {
$network_updates = wp_remote_retrieve_body( $network_updates );
set_site_transient( $transient_name, $network_updates, DAY_IN_SECONDS );
}
}
echo $network_updates;
Пример 3: Кэширование списка разрешенных пользователей
Допустим, сеть WordPress поддерживает список разрешенных пользователей, который обновляется раз в сутки. Данные можно кэшировать с помощью транзиента.
$transient_name = 'allowed_users';
$allowed_users = get_site_transient( $transient_name );
if ( false === $allowed_users ) {
$allowed_users = [ 'user1', 'user2', 'user3' ]; // Данные могут приходить из базы данных или API
// Сохраняем данные на 24 часа
set_site_transient( $transient_name, $allowed_users, DAY_IN_SECONDS );
}
// Проверяем, разрешен ли пользователь
if ( in_array( 'user4', $allowed_users, true ) ) {
echo "Пользователь разрешен";
} else {
echo "Пользователь не найден в списке разрешенных.";
}
Дополнительная информация
- Обработка отсутствия данных: если
get_site_transient()
вернетfalse
, это может означать, что транзиент либо истек, либо не существует. Поскольку функция возвращаетfalse
только в случае отсутствия или истечения транзиента, проверяйте это значение тождественно (===
). - Хуки:
pre_site_transient_{$transient}
— фильтр, вызываемый перед возвратом транзиента.site_transient_{$transient}
— фильтр, применяемый к значению транзиента при его получении.
- Совместимость с кэшированием: Если на сайте включено объектное кэширование, функция использует данные из кэша. В противном случае данные извлекаются из таблицы
wp_sitemeta
.
Заключение
Функция get_site_transient()
— полезный инструмент для создания и управления временными данными в мультисайтовой установке WordPress. Функция помогает оптимизировать загрузку данных и экономить ресурсы, сохраняя транзиенты на уровне всей сети.