Статьи

Полное руководство по API переходных процессов WordPress

WordPress поддерживает Transients API начиная с версии 2.8, но многие разработчики WordPress не знают о его существовании и использовании. В двух словах, WordPress Transients API позволяет нам хранить пары ключ-значение данных со сроком действия.

В этом руководстве мы подробно рассмотрим, как использовать этот API. Мы также увидим, чем он отличается от Options API, как он взаимодействует с системой кеширования WordPress и с некоторыми из ее вариантов использования.

WordPress Transient API

Параметры API против API переходных процессов

Большинство разработчиков WordPress знают об API параметров WordPress . Параметры API позволяют нам постоянно хранить пары ключ-значение в базе данных. Многие разработчики WordPress не осознают, что Options API реализует уровень кэширования (то есть WordPress Object Cache) для кэширования параметров. Если постоянный кэш не включен, то новый сеанс кэширования создается при каждом HTTP-запросе, в противном случае постоянный кэш используется API-интерфейсом параметров.

Почти каждый WordPress API взаимодействует с MySQL, используя WordPress Object Cache для кэширования данных, чтобы предотвратить многочисленные попадания MySQL.

API-интерфейс Transient работает немного иначе, чем все остальные API. Он сохраняет пары данных ключ-значение в MySQL только в том случае, если постоянный кэш не включен, в противном случае он использует только кэш объектов. Принимая во внимание, что все другие API используют оба для синхронизации данных, чтобы гарантировать, что данные являются постоянными. Поэтому переходные процессы не являются постоянными, то есть не должны использоваться для хранения критических данных. Так что Transient API отлично подходит для кэширования данных .

Примечание. Если постоянный кэш не включен, API-интерфейс Transients использует API-параметры для хранения пар данных ключ-значение, в противном случае он напрямую использует объектный кэш. Переходные процессы хранятся в таблице параметров. Каждый переходный процесс состоит из двух вариантов: данных пары ключ-значение и даты истечения пары ключ-значение.

Создать переходный

Чтобы установить переходный процесс, нам нужно использовать set_transient() . Эта функция принимает три параметра:

  1. Переходное имя (обязательно): должно быть строкой. Длина строки не может превышать 40 символов, иначе не удастся создать переходный процесс.
  2. Переходное значение (обязательно): должно быть строкой. Если вы передаете объект или массив, то он сериализуется, то есть преобразуется в строку.
  3. Истекающие секунды (необязательно): секунды, в течение которых переходный период истекает через. Переходный период также может истекать до истечения срока действия, поскольку кэшированные данные (то есть данные, хранящиеся в кеше объектов) изменчивы.

Вот пример кода с использованием функции set_transient() :

 set_transient("Website", "SitePoint", 3600); 

Здесь мы храним ключ с именем «Веб-сайт» со значением «SitePoint» в течение 1 часа. Через 1 час ключ больше не будет доступен.

set_transient возвращает true, если переходный процесс создан успешно, в противном случае он возвращает false.

Если вы не указали время истечения или не указали «0» в качестве времени истечения, оно никогда не истечет.

Примечание. Если время истечения не указано или время истечения равно 0, то переходные процессы автоматически загружаются (т.е. загружаются в память всякий раз, когда запрашивается страница).

API переходных процессов также предоставляет другую функцию для создания переходного процесса, т.е. set_site_transient . Он также принимает те же три параметра, что и set_transient . Большая часть функциональности между ними одинакова. Различия между set_transient и set_site_transient следующие:

  1. Когда set_site_transient используется в сети с несколькими сайтами, переходный процесс доступен для всех сайтов в сети.
  2. Независимо от того, есть время истечения или нет, переходные процессы, созданные с использованием set_site_transient , всегда загружаются автоматически.

Наконец, если вы запустите set_transient существующего временного ключа, то значение и время истечения будут обновлены с использованием нового предоставленного значения и времени истечения. Время истечения рассчитывается с первого раза, когда был установлен переходный процесс.

Извлечение переходного процесса

Чтобы получить сохраненный переходный процесс, вам нужно использовать функцию get_transient . Требуется только один параметр, то есть имя переходного процесса.

 $value = get_transient("Website"); if($value === false) { echo "Expired or not found"; } 

get_transient возвращает false, если переходный процесс истек или отсутствует. В противном случае он возвращает значение переходного процесса.

Переходный процесс вернет false, если он истек или не найден, поэтому вы никогда не должны хранить логические значения в переходном процессе. Если вы хотите сохранить логические значения, используйте целочисленную форму, то есть 0 или 1.

Если вы установили переходный процесс с помощью set_site_transient используйте get_site_transient для его получения вместо get_transient .

Удаление переходного процесса

Чтобы удалить переходный процесс, вам нужно использовать функцию delete_transient . Требуется только один параметр, то есть имя переходного процесса.

Вот пример:

 delete_transient("Website"); 

Возвращает true, если переходный процесс был успешно удален. Если переходный процесс не найден или по другой причине, он не может удалить переходный процесс и затем возвращает false.

Если вы установили переходный процесс с помощью set_site_transient используйте delete_site_transient чтобы удалить его вместо delete_transient .

Извлечение и кеширование сообщений определенной категории

API переходных процессов может использоваться для кэширования чего угодно. Большинство плагинов используют этот API для кеширования данных. Для примера давайте посмотрим, как получать и кэшировать сообщения категории.

 <?php if(($posts = get_transient("sitepoint_wordpress_posts")) === false) { $posts = new WP_Query("category_name=wordpress"); set_transient("sitepoint_wordpress_posts", $posts, 3600); } ?> <?php if($posts->have_posts()): ?> <?php while($posts->have_posts()) : $posts->the_post(); ?> //display the post <?php endwhile; ?> <?php else: ?> //display no posts found message <?php endif; ?> <?php wp_reset_postdata(); ?> 

Здесь мы кешируем сообщения категории в течение часа. Мы WP_Query сообщения, используя класс WP_Query . WP_Query сериализуется и сохраняется как переходный процесс. При получении он десериализуется.

Последние мысли

Эта статья демонстрирует, как легко мы можем кэшировать данные в WordPress с помощью API Transients.

Вы можете включить постоянный кеш в WordPress, используя Memcached Object Cache или плагины WP Redis .

Пожалуйста, дайте мне знать ваш опыт использования этого API в комментариях ниже.