Сергиев Посад
13:00 / МСК / дождь +13°C

Использование транзиентов и WP Cron для кэширования результата тяжеловесных операций WordPress

Скролл

Продолжаем изучать возможности WordPress вместе с разработчиком We Wizards Константином Агафоновым.

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

В меню должны отображаться только категории, в которых имеются товары в наличии в данный момент. Один из уровней меню — это отдельная от категорий таксономия товаров, то есть, необходимо фильтровать еще и значения отдельной таксономии по значению категории. Чтобы получить такую структуру данных, необходимо сделать очень много сложных запросов в БД магазина. Примерно по одному запросу на каждый пункт меню. Затем на основе получившегося дерева данных сгенерировать разметку меню. Это очень ресурсоемкий процесс, который нецелесообразно делать при загрузке каждой страницы сайта, потому что ожидание загрузки страницы посетителем может быть настолько большим, что превысит максимальное время работы скриптов на бэкенде, которое составляет от 30 секунд до нескольких минут.

Выделим ресурсоемкую задачу в отдельную функцию и повесим ее на кастомный хук: