✅ Новости WEB и WordPress, темы, плагины. Здесь мы делимся советами и лучшими решениями для веб-сайтов.

Руководство: изменение глобального запроса WordPress

27

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

Какой крючок использовать

Сначала вам нужно знать, к какому хуку добавить ваш код. Нам нужен хук, который происходит сразу после того, как WordPress установит все аргументы, но до фактического выполнения запроса. Для этого используем действие pre_get_posts.

В этом хуке вы получаете один параметр; который является WP_Queryобъектом, с которым WordPress позже выполнит запрос. Вы вносите изменения в объект, но вам не нужно возвращать его, так как WordPress выполнит запрос с измененным объектом.

add_action('pre_get_posts', function($query) { // Add your code here });

Изменение запроса, скорее всего, потребует от вас использования некоторых условных тегов для указания тех случаев, когда вы хотите его изменить. Например, вы можете настроить таргетинг запроса только в результатах поиска или представлениях категорий.

Условные теги

В WordPress есть множество условных тегов, которые вы можете использовать, чтобы указать, в каких случаях вы хотите добавить свой код. Условный тег — это просто функция, которая возвращает true или false в зависимости от того, в каком состоянии находится WordPress. Примеры общих условных тегов предназначены is_admin()для проверки того, находимся ли мы в настоящее время в админке или во внешнем интерфейсе, is_singular()находимся ли мы на одном посте или странице во внешнем интерфейсе, и is_search()если мы находимся на странице результатов поиска.

Имейте в виду, что хук pre_get_postsзапускается как для администратора, так и для внешнего интерфейса. Если вы хотите повлиять только на глобальный запрос во внешнем интерфейсе, вам нужно обернуть свой код внутри if-check для условного тега is_admin().

Примечание об условных тегах вpre_get_posts

Условные теги хороши и все такое, но есть некоторые вещи, о которых следует помнить при их использовании внутри pre_get_posts.

Во-первых, вам нужно ознакомиться с тегом is_main_query(). Действие pre_get_postsфактически запускается несколько раз для каждой загрузки страницы. Например pre_get_postsзапускается при генерации каждого меню (в том числе и в виджетах). Чтобы изменить фактический глобальный запрос, например сообщения для архива категорий или результатов поиска, вам необходимо настроить таргетинг на «основной запрос» с помощью is_main_query().

Во-вторых, вам нужно знать о случаях, когда вам нужно проверять условные теги на предоставленный объект, а не вызывать функцию «самостоятельно». Обычно, когда вы используете условные теги, вы пишете это так:

if (is_main_query()) { // Do stuff }

Однако при использовании pre_get_postsесть некоторые условные теги, которые необходимо применить к объекту. Например:

Вы всегда должны проверять is_main_query()объект, указанный в pre_get_posts. Прочтите документацию для pre_get_posts для получения дополнительной информации.

Это пример проверки, находимся ли мы не в админке, и находимся ли мы в основном посте запроса:

Изменение или добавление аргументов

Поскольку мы работаем с WP_Queryобъектом, вы можете обратиться к документации WP_Query, чтобы узнать, как создать свои аргументы для настройки запроса сообщений. Имейте в виду, что аргументы уже заполнены. В этом случае вам необходимо добавить или изменить существующие значения. Или удалите те, которые хотите удалить.

Вы используете set()функцию для WP_Queryобъекта, чтобы установить аргументы. Метод принимает два аргумента: ключ аргумента и, во-вторых, значение. Например, установка posts_per_pageаргумента будет выполнена следующим образом:

В тех случаях, когда вы хотите добавить или изменить уже существующий аргумент, вы обычно делаете это, сначала сохраняя существующий аргумент в переменной. Для этого можно использовать метод get(). Затем вы изменяете переменную, добавляя или объединяя массивы или еще что-то. И, наконец, вы используете set(), чтобы заменить измененную переменную обратно на объект запроса. Я рекомендую использовать var_dump()на объекте, чтобы увидеть, что он содержит, и это также хороший способ проверить правильность ваших условных тегов.

Вот краткий пример использования get()(просто проверьте, пусто ли оно), и если да, добавьте свои собственные аргументы с помощью set().

Примечание о tax_query

WordPress имеет отдельные подклассы для обработки части таксономии (WP_Tax_Query) внутри WP_Query. Если вам нужно внести более сложные изменения в запрос таксономии, pre_get_postsдействие может быть преждевременным. Некоторые значения могут быть пустыми, поскольку они заполняются позже. В этом случае вам может быть лучше использовать действие parse_tax_queryвместо pre_get_posts. Прочтите документацию по этому хуку, чтобы понять, подходит ли он вам.

Вывод

Аргументы, которые вы добавляете или изменяете, полностью зависят от того, что вы хотите сделать, но теперь у вас должно быть некоторое представление о стратегиях получения доступа к глобальному запросу. Если вам нужно получить некоторое представление об WP_Queryобъекте и о том, как использовать его аргументы, может быть интересна моя статья о том, как запрашивать сообщения .

Источник записи: awhitepixel.com

Этот веб-сайт использует файлы cookie для улучшения вашего опыта. Мы предполагаем, что вы согласны с этим, но вы можете отказаться, если хотите. Принимаю Подробнее