Функция get_transient(): описание, хуки и примеры использования – WP 2.8.0

GET_TRANSIENT() │ WP 2.8.0

Функция get_transient() позволяет получить значение временной опции (transient), которая используется для хранения временных данных.

Что такое transient?

Transient — это временная опция, которую можно использовать для хранения данных, которые не нужно сохранять на постоянной основе. Это удобно, если у вас есть данные, которые часто меняются, и которые вы не хотите загружать каждый раз из базы данных.

Если на сайте включено кэширование объектов, значение transient будет получено не из таблицы wp_options, а из кэша, что ускоряет доступ к данным.

На мультисайтах транзиенты извлекаются из настроек текущего сайта или блога.

Для установки или получения временной опции главного сайта используйте функции set_site_transient() или get_site_transient() соответственно.

Хуки функции

  • pre_transient_(transient) — срабатывает перед получением transient.
  • transient_(transient) — срабатывает при получении transient.

Возвращаемое значение

Функция возвращает разные значения:

  • false — если:
    • transient не существует,
    • transient не имеет значения,
    • срок действия transient истек.
  • В противном случае возвращается значение transient.

Важно!

Проверяйте возвращаемое значение на строгое равенство с помощью оператора ===, а не с помощью обычного равенства ==. Это важно, потому что значение может быть 0, пустой строкой или пустым массивом. Поэтому, если вы хотите сохранить состояние, используйте 0 вместо false или помещайте false в массив.

Использование

get_transient( $transient );
  • $transient (string) (обязательно) — имя transient, которое не должно быть экранировано SQL.

Примеры

Сохранение текущего запроса в transient

Следующий пример показывает, как использовать get_transient() и set_transient() с WP_Query для сохранения текущего запроса в transient. Это может пригодиться, чтобы сохранить "тяжелые" запросы.

// Получаем значение transient
$special_query_results = get_transient( 'special_query_results' );

if ( false === $special_query_results ) {
    // Если transient пуст, добавляем его
    $special_query_results = new WP_Query( 'cat=5&order=random&tag=tech&post_meta_key=thumbnail' );
    set_transient( 'special_query_results', $special_query_results );
}

// Используем $special_query_results как обычно...

История изменений

  • С версии 2.8.0 — была введена функция.

Код функции

function get_transient( $transient ) {
    $pre = apply_filters( "pre_transient_{$transient}", false, $transient );

    if ( false !== $pre ) {
        return $pre;
    }

    if ( wp_using_ext_object_cache() || wp_installing() ) {
        $value = wp_cache_get( $transient, 'transient' );
    } else {
        $transient_option = '_transient_' . $transient;
        if ( ! wp_installing() ) {
            $alloptions = wp_load_alloptions();

            if ( ! isset( $alloptions[ $transient_option ] ) ) {
                $transient_timeout = '_transient_timeout_' . $transient;
                wp_prime_option_caches( array( $transient_option, $transient_timeout ) );
                $timeout = get_option( $transient_timeout );
                if ( false !== $timeout && $timeout < time() ) {
                    delete_option( $transient_option );
                    delete_option( $transient_timeout );
                    $value = false;
                }
            }
        }

        if ( ! isset( $value ) ) {
            $value = get_option( $transient_option );
        }
    }

    return apply_filters( "transient_{$transient}", $value, $transient );
}

Связанные функции

  • _transient (OPTIONS) — помогает управлять временными опциями.
  • delete_expired_transients() — удаляет устаревшие transient.
  • delete_transient() — удаляет конкретный transient.
  • get_site_transient() — получает transient сайта.
  • set_site_transient() — устанавливает transient сайта.
  • set_transient() — устанавливает transient.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *