Как организовать и кэшировать дополнительные данные, связанные с терминами?
Я обновляю свой плагин, и мне трудно найти "лучший способ" для создания определенной функциональности. Плагин позволяет пользователям связывать изображения из своей медиатеки с любым термином любой таксономии. В настоящее время я работаю над созданием функций, которые пользователи могут добавлять в свои темы и плагины, чтобы получить данные, хранящиеся в плагине. Код, который у меня есть до сих пор, можно посмотреть здесь: https://github.com/mfields/Taxonomy-Images/blob/master/public-filters.php
Функциональность, представленная в этом файле, позволяет пользователям получать изображение запрашиваемого в данный момент термина (для представлений архива таксономии), а другая функция в основном является оболочкой для основной функции get_terms()
, которая возвращает все термины данной таксономии при добавлении идентификатора изображения к каждому объекту термина. Я хотел бы добавить третью функцию в файл перед выпуском. Это будет оболочка для get_the_terms()
и вернет все термины, связанные с глобальным объектом post, которые содержат изображения.
Я думал о моделировании функции get_the_terms()
после функции get_terms()
, которая встроила кэширование для файлов изображений. Но я немного боюсь того, что произойдет, если эта функция будет использоваться в цикле в любом шаблоне архива.
В основном рабочий процесс будет выглядеть примерно так:
- Получить все ассоциации изображений/терминов (0 запросов).
- Получить термины, связанные с глобальная почта:
get_the_terms()
(0 запросов). - Запрос для всех изображений, связанных с терминами (3 запроса). Это делается путем создания списка всех идентификаторов изображений и передачи их в
get_posts()
с помощью параметраinclude
.
ИМХО, это хорошо делать в отдельных представлениях(single.php, page.php , и т.д.), Но что произойдет, если пользователь будет использовать эту функцию в цикле в архивных представлениях? Вам нужно будет умножить 3 запроса (созданных с помощью get_posts()
) на значение параметра сообщений на страницу (10 по умолчанию Установка WordPress). Итак, теперь у нас всего 30 запросов. Это становится довольно уродливым быстро! Особенно, если пользователи хотят, чтобы отображались изображения из нескольких таксономий. 2 таксономии на пост добавят 60 к тому, что нужно сделать WordPress!
В принципе, есть несколько путей продвижения вперед, и я хотел бы знать, что бы вы сделали в подобной ситуации.
Не создавайте функциональность вообще.
Создайте функцию и обучите пользователей тому, что кэширование плагин должен быть установлен, если они используют get_the_terms() в представлениях архива.
Создайте функцию + создайте другую функцию, которая будет кэшировать все изображения перед загрузкой шаблона архива. Этот процесс будет включать что-то вроде: После создания массива
$posts
(но до загрузки шаблона) выполните цикл по всем записям в массиве, вызывая get_the_terms() каждую итерацию для каждой общедоступной таксономии. Выходные данные всех объектов term будут сохранены в новом массиве. Затем я мог бы определить, какие изображения связаны с каждым термином каждой таксономии, и передать идентификаторы изображений вget_posts()
за один снимок. Это позволит кэшировать всю информацию об изображении для использования в шаблоне в 3 запросах вместо 30, 60 или 90.
IMHO 3 кажется логичным решением, но я не совсем уверен, будет ли это антиоптимизация или нет.
Пожалуйста, дайте мне знать ваши мысли по этому поводу!
1 answers
Я бы сказал, что ваш третий вариант - это правильный путь.
Кстати, почему вы включили свой собственный статический кэш в taxonomy_image_plugin_get_associations()
вместо того, чтобы использовать встроенный API wp_cache для этого? Есть ли причина, по которой wp_cache_get
не будет работать здесь? Похоже, что использование кэша объектов WP будет лучше оптимизироваться, когда у людей включены плагины кэширования.