Изучаем WP_Query Действия и фильтры


Оглавление (нажмите, чтобы открыть):

Методы и свойства класса WP_Query

Будем считать, что это будет небольшое (но довольно полезное) дополнение к посту про создание циклов при помощи WP_Query.

Сначала я хотел дописать эту часть прямо там в комментариях, но она получилась не такой уж и небольшой, да и к тому же не все люди читают комменты.

Сначала создам объект, он мне ещё пригодится позднее:

Свойства:

Во всех последующих примерах будет использоваться объект, созданный в начале поста, ну то есть двумя строчками выше ��

    $query (массив) — параметры созданного объекта,

Методы:

Я не стал включать сюда методы, смысл которых мне непонятен, возможно позднее я их добавлю.

    init() — инициализация объекта, сбрасывает все свойства класса на NULL, 0 или FALSE

Впервые познакомился с WordPress в 2009 году. С 2014 года меня можно встретить на WordCamp по всему миру — официальной конфе по WordPress, иногда там выступаю, но с 2020 выступаю только на тех, которые сам организовываю. Также периодически школа Epic Skills и LoftSchool приглашают меня вести у них уроки/вебинары.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля — пишите мне.

Должен ли я использовать Pre Get Posts или WP_Query

У меня есть следующий запрос, который я вызываю в моем шаблоне taxonomy.php через query_brands_geo(‘dealers’, ‘publish’, ‘1’, $taxtype, $geo, $brands);

Эта функция работает отлично. Однако после чтения кода для сообщений в сообщениях он упомянул pre_get_posts как предпочтительный способ изменить запрос по умолчанию. Будет ли pre_get_posts более эффективным, чем моя функция wp_query ниже?

Если да, то как мне построить pre_get_posts и передать мою переменную и запрос ниже?

3 ответа

pre_get_posts будет запускать один и тот же запрос, поэтому оба они будут принимать одинаковое время. Но, если вы используете действие pre_get_posts , вы сохраните один или несколько SQL-запросов. Прямо сейчас WordPress запускает запрос по умолчанию, а затем вы запускаете запрос с помощью этой функции, которая заменяет результаты запроса по умолчанию (в результате запрос по умолчанию бесполезен). Ниже приведен пример перемещения $args к

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

main WP_Query и его фильтры

Во-первых, WordPress использует query_posts() (тонкая оболочка вокруг WP_Query ), которая не должна использоваться в тем или плагинах) для выполните WP_Query . Этот WP_Query действует как основной цикл /запрос. Этот запрос будет проходить через множество фильтров и действий до тех пор, пока не будет создана фактическая строка запроса SQL. Один из них — pre_get_posts . Другие posts_clauses , posts_where и т. Д., Что также позволяет перехватить процесс построения строки запроса.

Внимательно изучите, что происходит внутри ядра

WordPress запускает функцию wp() (в wp-includes/functions.php ), которая вызывает $wp->main() ( $wp ) является объектом класса WP, который определен в wp-includes/class-wp.php ). Это говорит WordPress:

  1. Разберите URL-адрес в спецификации запроса, используя WP->parse_request() — подробнее об этом ниже.
  2. Задайте все переменные is_, которые используются условными тегами, используя $wp_query->parse_query() ( $wp_query ) является объектом класса class WP_Query , который определен в wp-includes/query.php ). Обратите внимание, что, несмотря на имя этой функции, в этом случае WP_Query->parse_query на самом деле не проводит синтаксический разбор для нас, так как это выполняется до того, как WP->parse_request() .
  3. Преобразуйте спецификацию запроса в запрос базы данных MySQL и запустите запрос базы данных, чтобы получить список сообщений, в функции WP_Query-> get_posts (). Сохраните сообщения в объекте $ wp_query, который будет использоваться в Loop WordPress.

Заключение

Если вы действительно хотите изменить основной запрос, вы можете использовать широкий спектр фильтров. Просто используйте $query->set( ‘some_key’, ‘some_value’ ); в измените данные там или используйте $query->get( ‘some_key’ ); — получить данные для выполнения условных проверок. Это избавит вас от выполнения второго запроса, так как вы изменяете только запрос SQL.

Если вам нужно выполнить запрос дополнительный , перейдите к объекту WP_Query . Это добавит еще один запрос в БД.

Пример

В качестве ответов всегда лучше работать с примером, у вас здесь очень хороший (реквизит для Брэда Туеснара), который просто расширяет основной объект и, следовательно, довольно многократно используется (выдает плагин из него):

Затем вы можете запустить свой второй /дополнительный запрос, как вы можете видеть в следующем примере. Не забудьте повторно выполнить запрос.

Создание формы-фильтра записей WordPress по произвольным полям и другим параметрам

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

Сегодня мы попробуем пойти другим путем и научимся формировать фильтры с использованием произвольных полей.

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

Мастер Йода рекомендует:  8 известных структур данных, о которых спросят на собеседовании

Итак, начнем подготовку к реализации нашего фильтра.

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

Для этого в админке нашего сайта создадим новую пустую страницу, назовем ее «Результаты поиска» и назначим ей URL «customsearch»

Далее связываемся с нашим сервером с помощью FTP-клиента, находим файл page.php, делаем с него копию и переименовываем в page-customsearch.php. Таким образом, мы сообщаем, что все обращения к нашей созданной в админке странице будут обрабатываться именно в этом файле, не затрагивая другие, а обращаться мы к ней будем через наш фильтр записей.

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

Обратите внимание на атрибут action тега form, в нем мы указываем адрес именно той страницы, которую создали в админке и для которой мы создали отдельный шаблон на сервере. Метод передачи данных мы можем использовать любой, POST или GET.

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

Обратимся к стандартной функции query_posts(), именно в эту функцию мы и должны передать сформированный нами массив. Эта функция распологается перед началом цикла записей и влияет на него, заставляя его выводить именно те записи, которые нам нужны и в том порядке который мы указали, лишь получив сформированный массив.

Как же формировать этот массив? Для этого мы можем обратиться к обширному описанию этой функции в кодексе Worpress. Это описание я дублировать тут не буду, но постараюсь подробно описать логику построения массива данных именно для нашей формы.

Итак, перейдем к построению массива данных для функции query_posts(). Для этого мы должны открыть для редактирования созданный нами ранее файл page-customsearch.php, где и будет происходить обработка и вывод результатов обработки нашего запроса.

Находим в нем начало цикла, которое выглядит примерно так:

Поиск и фильтрация

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

Плагины WordPress

Live Search and Custom Fields v2.4.9 – расширенный поиск и фильтрация для WordPress и WooCommerce

Если вам нужен плагин расширенного поиска и фильтрации для WordPress, тогда Live Search и Custom Fields (LSCF) – это идеальный выбор, который обеспечивает мощный поиск в реальном времени и функциональность фильтра продуктов WooCommerce. Этот плагин позволяет вашим пользователям фильтровать и искать сообщения или продукты вашего магазина в соответствии с их потребностями. Созданный с использованием современных…. Читать дальше »

Плагины WordPress

SearchWP v3.0 – плагин для расширения стандартного поиска WordPress

SearchWP v3.0 – это плагин для расширения стандартного поиска WordPress. SearchWP использует ваши существующие формы поиска и шаблоны результатов поиска. Особенности плагина WordPress SearchWP Индексирование документов PDF и Office Индексируйте содержимое PDF, Office и текстовых документов в медиатеке WordPress. Автоматическая интеграция со стандартным поиском WordPress Движок плагина SearchWP по умолчанию использует существующие собственные формы поиска WordPress и…. Читать дальше »

Плагины WordPress

i-Search Pro v4.2.5 – мощная система живого поиска для WordPress

Плагин i-Search Pro меняет способ поиска на WordPress. Он готов предоставить результаты поиска в реальном времени за миллисекунды. i-Search построен для максимальной скорости и гибкости. Поддерживает поиск в любых типах записей, пользовательских полях, таксономиях, мета-ключах, полях ACF, продуктах WooCommerce, категориях … Почти везде! Особенности плагина WordPress i-Search Совместим c плагинами Advanced custom fields (ACF) WpBakery (Visual…. Читать дальше »

Плагины WordPress

FacetWP v3.3.1 – расширенный фильтр и фасетный поиск для WordPress


Используйте плагин FacetWP для WordPress для добавления фасетного поиска и расширенного фильтра записей на сайты электронной коммерции, библиотеки ресурсов, сайты каталоги и многие другие. Основные особенности плагина WordPress FacetWP: Умная фильтрация Пользователи смогут находить, что они ищут быстрее, потому что будут показаны только соответствующие варианты фильтрации. Это приводит к более удовлетворённым клиентам и увеличению продаж. Использование…. Читать дальше »

Плагины WordPress

WooCommerce Compare Products v1.3.3 – плагин для сравнения продуктов WooCommerce

Помогите своим клиентам сравнить продукты WooCommerce при помощи лучшего плагина для сравнения продуктов. Сравненные продукты загружаются динамически через AJAX в таблицу. Затем ваши пользователи смогут увидеть различия, выделив их или удалив сходства. С лёгкостью создавайте сравнительные таблицы, выбирайте данные, с которыми ваши пользователи могут сравнивать, и помогайте своим клиентам находить различия между продуктами. Выберите, хотите…. Читать дальше »

Плагины WordPress

JetSearch For Elementor v1.0.1 – поиск по сайту на основе AJAX для конструктора Elementor

JetSearch – это мощный, но простой в использовании виджет поиска на основе AJAX для конструктора сайтов и страниц Elementor. Отобразите наиболее релевантные результаты поиска в виде привлекательных макетов, чтобы посетители всегда находили необходимую информацию. Ключевые особенности плагина WordPress JetSearch: Испытайте истинную мощь функциональности поиска. Узнайте, как плагин JetSearch для Elementor может помочь вам улучшить ваш сайт…. Читать дальше »

Плагины WordPress

Jet Smart Filters v1.2.0 – AJAX-фильтры для конструктора Elementor

Плагин Jet Smart Filters добавляет простые в использовании AJAX-фильтры на страницы, созданные с помощью Elementor, которые содержат динамические списки (сообщения, термины и продукты WooCommerce). Особенности плагина WordPress Jet Smart Filters: 7 Вариантов фильтров Откройте для себя гораздо более быстрый способ фильтрации продуктов и публикаций без обновления страницы. Поддерживает Radio-фильтры, Фильтры по диапазону дат, Поисковые фильтры, Активные фильтры, Фильтры…. Читать дальше »

Плагины WordPress

WooCommerce Product Filter v6.6.5 – фильтр продуктов WooCommerce

Плагин WooCommerce Product Filter – это самый лучший фильтр продуктов WooCommerce! С расширенными фильтрами для ваших клиентов и полным контролем для вас, WooCommerce Product Filter – это обязательный плагин фильтра продуктов для любого владельца интернет-магазина на WordPress и WooCommerce. Фильтр продуктов WooCommerce предлагает неограниченные возможности, чтобы ваши клиенты могли фильтровать продукты по любым критериям и…. Читать дальше »

Плагины WordPress

Mofect On-Site Search v1.0 – живой поиск для WordPress

Mofect On-Site Search – это плагин поиска по сайту для WordPress, WooCommerce и Easy Digital Downloads. Он предлагает панель расширенного живого поиска по сайту с помощью Ajax, – результаты поиска будут быстро отображаться при вводе ключевого слова. Ключевые слова могут быть отслежены в панели плагина, чтобы вы знали, что на самом деле ищут посетители вашего…. Читать дальше »

Плагины WordPress

WP Brain v1.3.3 – управление видимостью содержимого веб-сайта на WordPress

Используйте мощные фильтры плагина WP Brain, чтобы контролировать, когда и где будет отображаться содержимое вашего веб-сайта, и кто может его увидеть. Особенности плагина WordPress WP Brain: Видимость содержимого: Управление видимостью контента с использованием коротких кодов IF и ELSE Видимость элементов меню: Показывать и скрывать элементы меню с помощью настроек пользовательских фильтров Видимость виджетов: Используйте логическую систему…. Читать дальше »

Мастер Йода рекомендует:  Блокчейн, ИИ, бессерверные вычисления ТОП-10 технологий 2020

Фильтр posts_clauses или как «внедриться» в WP_Query

Недавно поступила просьба создать интеграцию с моим плагином Market Exporter и плагином WooCommerce Warehouses, чтобы можно было менять склад из которого идет выгрузка. Забегая вперед скажу, что я был не в восторге от предоставленной мне версии плагина, потому что она не работала с php 7.1 и не дружила с последней версией WooCommerce. Но я все же попытался помочь решить поставленную задачу.

Для тех кто не знает — Market Exporter экспортирует товарные предложения из WooCommerce в файл .yml, пригодный для импорта в Яндекс Маркет. Выгрузка происходит по товарам, которые есть в наличии и у которых задана цена. Плагин WooCommerce Warehouses, в свою очередь, позволяет задать товару несколько складов. Например, есть склад поставщика, где 250 товаров в наличии и склад магазина, где товара в наличии на данный момент нет. Так вот при настройках по умолчанию плагин Market Exporter выгрузил бы все товарные предложения, ведь они есть в наличии… на складе поставщика… Но это плохо, надо это решать.

Переходим от теории к практике. Нужно как-то безобидно интегрироваться в плагин и не изменить текущего функционала. Да, есть возможность напрямую переписать запрос к бд, который выгружает товар. Но для этого хорошо бы, чтобы в плагине были эти запросы. А их нет, т.к. используется функционал WooCommerce и WordPress. Да и нам нужна универсальность. Нам на помощь приходит фильтр posts_clauses.

Фильтр posts_clauses позволяет получить доступ к запросу WP_Query до его исполнения, когда сам запрос уже сформирован, но еще не исполнен. Если погуглить информацию о posts_clauses, то можно будет узнать, что есть более конкретные фильтры для изменения WHERE, JOIN и т.д. Но для примера мы воспользуемся именно posts_clauses, как универсальным (не оптимальным!) фильтром.

или если у нас класс:

И создаем метод filter_by_warehouse_id:

Пробежимся по строчкам.

Нам нужен будет глобальный объект $wpdb, чтобы получить префикс для базы таблицы базы данных,

Задаем ID склада, откуда будет идти выгрузка. Здесь мы его задаем вручную, но можно его забирать и из базы данных, и из select… да откуда угодно.

Ссылаемся на JOIN-часть WP_Query.

Не делайте так, но ради примера — сверяем запрос с тем, который нам нужен. И если он совпадает, то добавляем наш JOIN (строчка 10).

Строчки 12-13 мы добавляем условие WHERE.

Итого. У нас есть запрос, который будет делать дополнительный запрос к таблице wp_inventory_manager_product_warehouse и проверять наличие товара на заданном складе. Мы не нарушили работу плагина, не меняли его функционал, а лишь дополнили… Дальнейшие действия — повесить данный фильтр на опцию плагина или сделать некий интеграционный файл, который можно было бы включить в плагин/тему.

Плагины WordPress PHP (хуки, фильтры, действия)

В прошлом занятии мы уже упоминали о хуках, давайте рассмотрим их подробнее.

Хуки (от анг. слова hook — крючок, зацепка) — это созданные пользователями функции (то есть нами), которые привязываются к функциям WordPress (заложены в самом коде движка WordPress). То есть при каждом выполнении функции движка будет проверяться — не привязана ли к этой функции какая-нибудь пользовательская функция и если таковая есть, то одновременно с функцией движка будет выполнена пользовательская функция.

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

Хуками в WordPress называются фильтры (filter) и события (action). В программной части это абсолютно одно и тоже, т.е. обрабатывается и то и другое одинаково, можно например заменять функции add_filter() и add_action() — все будет работать! Разделение нужно, потому что по смыслу это разные вещи

Фильтры (filters) предназначены для “фильтрования” (изменения) любых данных перед тем как они будут выведены на странице или добавлены для хранения в базу данных. Это фильтрация спама, ошибок или просто ошибочного ввода в формах, откуда собственно и произошло английское название.

Действия (actions) предназначены для замены различных действий ядра вашими действиями (например изменения строки запроса к базе данных), в программировании такое изменение действий базового функционала ещё называют перегрузкой.

Как работают фильтры в WordPress

Для работы фильтра используются две функции:

  1. apply_filters() — вызывается там, где применяется фильтр. Запускает добавленные к фильтру PHP функции.
  2. add_filter() — добавляет/прикрепляет PHP функции к указанному фильтру. Используется до того, как фильтр будет применен/вызван/запущен с помощью apply_filters(). Нужно это для того, чтобы, во время срабатывания фильтра, PHP функция уже была подключена к фильтру и обработала переданное значение (отфильтровала его).

apply_filters()

Применяет прикрепленную к указанному фильтру PHP функцию. Прикрепляется функция с помощью add_filter().
Используется там, где нужно изменить значение переменной (например текст).
Используется в плагинах и темах, для создания хуков-фильтров (зацепок пользовательских функций).
Новые фильтры должны иметь уникальные названия и не должны совпадать с уже имеющимися в WP названиями фильтров.

Возвращает

Отфильтрованное значение $value, которое передается функции-обработчику хука.

WP Query: Примеры циклов

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

Это будет интересно и в то же время познавательно. Итак, приступим!

Создание цикла с помощью класса WP_Query

На эту тему можно было бы написать отдельную статью, но мы постараемся здесь изложить все основные моменты кратко и предельно понятно.

Цикл, созданный при помощи WP_Query, отличается от стандартного цикла. Типичный WordPress цикл выглядит следующим образом:

А вот как выглядит цикл, созданный посредством использования WP_Query:

Отличия между ними заключаются вот в чем:

  • Мы задаем ряд аргументов для экземпляра WP_Query,
  • Затем инстанцируем класс WP_Query,
  • Добавляем $my_query-> в начало функций have_posts() и the_post() (в данном случае это методы класса WP_Query),
  • И сбрасываем данные параметра $post для возврата основного запроса.

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


Выводим записи автора за текущий год

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

Мастер Йода рекомендует:  Lubuntu перестанет быть решением только для слабых ПК

Вам остается только передать этот запрос в цикл.

Выводим записи из текущей категории (за исключением текущей записи)

Предположим, вы хотите создать цикл для каждой записи на соответствующих страницах и вывести список записей из категории, к которой эта запись относится. Очевидно, вам придется исключить из выборки текущую запись, поскольку она может быть одной из последних записей в данной категории. Создаем запрос с параметрами ‘cat’ и ‘post__not_in’:

Проще простого, не так ли? А если мы создадим пользовательский шаблон страницы с циклом, выполняющим подобный запрос, то получим в результате страницу «Самые комментируемые записи».

Настраиваем простой слайдер

При создании корпоративных сайтов, портфолио или веб-журналов, слайдеры стали своеобразным «мастхэвом», неотъемлемой составляющей подобных проектов. Я не большой фанат слайдеров (считаю, они отрицательно воздействуют на пользовательское восприятие), но в сети они весьма популярны. Если вам нужны слайдеры, используйте простой запрос, созданный с помощью класса WP_Query.

Аргумент ‘cat’ можно использовать для получения слайдов из различных категорий, что позволит вам поделить слайды на группы и использовать несколько слайдеров на разных страницах. Если же вы предпочитаете наличие лишь одного слайдера на своем сайте, удалите эту строку.

Выводим случайные цитаты в сайдбаре

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

Здесь мы создаем тип записи, а затем с помощью запроса создаем цикл в сайдбаре. Простое и элегантное решение.

Выводим список товаров в определенном ценовом диапазоне

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

Создаем шорткод для встраивания записей внутрь записей

В этом примере мы создадим шорткод, который позволит вставлять одну запись (или пользовательский тип записи) в другую. Кроме того, мы сможем определять будет ли запись выводиться полностью либо лишь ее часть:

Выводим список текущих запланированных записей

Почему бы вам не попробовать вывести несколько анонсов будущих записей для своих посетителей? С помощью следующей функции можно вывести список запланированных записей с/без выдержек после заголовков:

Выводим запись годичной давности

Если ваш блог создан более года назад, а его контент актуален во все времена (и в 2015 и в 2025 гг.), то добавление раздела «Записи в этот день год назад» позволит существенно увеличить количество просмотров ваших страниц. Сделать это можно следующим образом:

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

Выводим дочерние страницы текущей страницы

Вы считаете, что на страницах «Услуги», «Мои работы» и «Мое портфолио» кроме заголовков подстраниц разместить больше нечего? Вы правы, эти страницы обречены на роль «заполнителей». Подстраницы в этом случае – наиболее предпочтительный вариант. А если конкретнее, здесь можно было бы разместить, к примеру, сетку (grid) с миниатюрами квадратной формы и ниже их заголовками. Давайте посмотрим, какой вид запроса можно использовать для создания подобного шаблона страницы:

Заключение

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

Как создать продвинутый поиск в WordPress с помощью WP_Query

Дата публикации: 2020-04-18

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

Большая часть преимуществ WordPress идет из его гибкой архитектуры данных, с помощью которой разработчики могут широко настраивать свои системы с помощью пользовательских типов постов, таксономий, а также пользовательских полей. Однако когда речь заходит о поиске в WordPress, то пользователю предоставляется всего одно поле, которое зачастую ведет себя настолько неадекватно, что администраторы загружают внешние поисковые системы наподобие Google Custom Search или сторонних плагинов.

Статья разделена на 2 части. В первой я расскажу в теории, как обработать запрос пользователя, начиная от передачи URL, процесса выполнения запроса и до вывода результата. А вторая часть это конкретное применение полученной теории из первой части, в ней мы создадим свою продвинутую поисковую систему. Давайте разберем парочку ключевых концепций.

Запросы пользователя

Когда пользователь переходит по ссылке или вбивает URL определенной страницы вручную, WordPress выполняет серию операций, хорошо описанную в Query Overview. Если коротко, то происходит следующее:

WordPress разбирает запрашиваемый URL на набор параметров (которые называются спецификация запроса).

Задаются все переменные «is_», связанные с запросом.

Как создать сайт самому?

Какие технологии и знания необходимы сегодня, чтобы создавать сайты самостоятельно? Узнайте на интенсиве!

Спецификация запроса конвертируется в MySQL запрос, который посылается в базу данных.

Полученные из БД данные хранятся в объекте $wp_query.

Затем WP обрабатывает ошибку 404.

Посылаются HTTP заголовки блога.

Инициализируются переменные цикла.

По правилам иерархии выбирается шаблон.

WordPress запускает цикл.

Первым происходит парсинг URL строки, так что давайте разберем строки запроса и переменные.

Переменные WP Query: стандартные и пользовательские

В кодексе говорится: «Пользователи или разработчики WordPress могут использовать массив переменных запроса для поиска контента определенного типа или в качестве дополнительного функционала в дизайне темы и/или плагина.»

Другими словами, переменные запроса WP определяют результат выполнения запроса в БД. По умолчанию в WP доступны переменные запроса типа private и public. В кодексе о таких переменных говорится: Публичные переменные запроса это переменные, доступные напрямую через URL запроса из формы. example.net/?var1=value1&var2=value2

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

WP_Query() и настраиваемый фильтр

Я пытаюсь отобразить некоторые сообщения в блоге WordPress, используя WP_Query(). Идея состоит в том, чтобы отобразить 9 случайно выбранных должностей среди сообщений, которые были опубликованы за последние 30 дней. По некоторым причинам это не работает.

Вот код, который я использую:

Я думаю, что проблема заключается в использовании add_filter, но я не мог понять, что я делаю неправильно до сих пор. Любая помощь будет большой 🙂 Спасибо

Это должно работать, нет необходимости в фильтре.
Дополнительные параметры времени

WordPress+ACF сортировка и вывод записей с фильтром по произвольным полям

Задача: вывести записи с сортировкой по дате указанной в произвольном поле плагина ACF.

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

Добавляем в functions.php темы следующий код:

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

Обучающее видео от Эллиота (разработчика ACF), он показывает как просто и быстро делать фильтр записей при помощи плагина:

Добавить комментарий