Разное

Wp query posts: WP_Query | Class | WordPress Developer Resources

11.05.2023

Выбор правильного запроса для разработки WordPress

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

Какой бы ни была ваша цель, вы решили создать собственный шаблон страницы с запросом, который делает что-то немного другое. Однако, прежде чем вы начнете программировать, вам нужно принять решение: какой инструмент запросов WordPress вы должны использовать?

WordPress включает в себя несколько разных запросов: WP_query , query_posts() , get_posts() , get_pages() и pre_get_posts . Во многих случаях для достижения желаемых результатов можно использовать более одного из этих инструментов. Однако остается вопрос, какой на использовать ?

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

Щелкните ссылку ниже, чтобы изучить определенный элемент, или продолжайте читать, чтобы узнать обо всех этих параметрах:

  • WP_Query
  • pre_get_posts
  • запрос_сообщений ()
  • get_posts()
  • get_pages()
  • Применение теории на практике

Давайте сразу к делу.

WP_Query

WP_Query — это класс, стоящий за (почти) каждым запросом WordPress. Когда вы загружаете страницу или сообщение в WordPress, Объект WP_query , $query , создается и извлекает соответствующие данные публикации или страницы. Думайте о WP_Query как о движке, который поддерживает большинство запросов WordPress.

Вы используете WP_Query , даже не подозревая об этом. Когда вы загружаете URL-адрес, ядро ​​​​WordPress создает запрос к базе данных с WP_Query на основе URL-адреса и настроек, которые вы применили к своему веб-сайту. Итак, если вы обращаетесь к странице с URL-адресом, например, http://example.com/category/wordpress WordPress создает объект WP_Query , который находит все записи в категории WordPress и загружает все данные записей.

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

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

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

Единственным исключением является случай, когда все, что вам нужно сделать, это отфильтровать результаты стандартного запроса. В этом случае вам следует использовать pre_get_posts . Итак, давайте посмотрим на это дальше.

pre_get_posts

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

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

pre_get_posts — это инструмент для этой работы.

В некоторых случаях pre_get_posts не работает и не должен использоваться. Кодекс WordPress предлагает два таких случая:

  • Фильтр pre_get_posts не следует использовать для изменения запроса в шаблоне для одной страницы, поскольку это повлияет на свойства, уже установленные с помощью parse_query() .
  • Фильтр pre_get_posts не будет работать, если добавить в шаблон файлы, такие как archive.php , потому что эти файлы загружаются после того, как основной запрос уже запущен.

Что нам остается? Это означает, что pre_get_posts — отличный выбор для изменения запроса загрузки сообщений в основной цикл домашней страницы, страницы блога и отдельных страниц, таких как page. php и single.php .

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

query_posts()

Если вы покопаетесь в учебниках WordPress, выпущенных несколько лет назад, вы найдете множество руководств, рекомендующих использование query_posts() . Однако современные учебники почти повсеместно не рекомендуют этого делать. Вот почему.

Функция query_posts() заменяет основной объект запроса, $query , который создается и используется циклом по умолчанию, запускаемым ядром WordPress. Он делает это, создавая новый Экземпляр WP_Query и назначение его объекту $query .

Может показаться, что query_posts() действительно мощный и полезный.

Однако возня с основным циклом означает, что query_posts() имеет серьезные недостатки, и их следует избегать.

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

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

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

Другими словами, если вы пишете тему или плагин — именно этим занимается большинство из нас — избегайте использования query_posts()

. Вместо этого создайте совершенно новый объект WP_Query или используйте get_posts() , get_pages() или вместо этого pre_get_posts .

get_posts()

Думайте о функции get_posts() как о модифицируемом, предопределенном экземпляре класса WP_Query , потому что это именно то, чем оно является. Когда вы используете get_posts() , вы фактически вызываете предустановленные значения по умолчанию и используете их для создания экземпляра класса WP_Query .

В каком-то смысле get_posts() очень похож на query_posts() : они оба являются предопределенными экземплярами WP_Query . Однако они также сильно отличаются, потому что query_posts() заменяет объект $query по умолчанию, а get_posts() просто создает совершенно новый запрос, который не взаимодействует с глобальными переменными, как это делает query_posts() . .

Итак, какой смысл использовать get_posts() ? Почему бы просто не использовать WP_Query ? Ответ — удобство. Если вы думаете об использовании get_posts() , вы определенно можете выполнить все, что вы пытаетесь выполнить, с помощью WP_Query . Однако, используя get_posts() , вы экономите несколько нажатий клавиш.

Есть еще одно различие между WP_Query и get_posts() . То есть последний возвращает массив сообщений, а первый возвращает сообщения по одному с помощью функции the_post() . Это означает, что get_posts() возвращает все сообщения сразу в виде массива, в то время как WP_Query перебирает сообщения по одному, отображая соответствующий контент каждого сообщения по мере его повторения. На практике это означает, что при использовании get_posts() вы используете функцию foreach для отображения результатов, но вы используете стандартную структуру цикла if...while для вывода содержимого при использовании WP_Query .

Следует также помнить, что с get_posts() не изменяет глобальный объект $query , вам нужно использовать setup_postdata() для каждого сообщения, чтобы получить доступ к методам и свойствам WP_Query . Хотя это может показаться сложным, на самом деле это не так. Взгляните:

Загрузка gist jpen365/67592c6e5f70553692a002fea13da63f

Таким образом, этот фрагмент кода вернет четыре сообщения из категории слайдера (предположительно, чтобы отобразить их в слайдере сообщений). Во-первых, мы убеждаемся, что запрос вернул что-то с if ( $slider_posts ) код, а затем прокручивайте сообщения, отображающие заголовок и содержание. Используя setup_postdata() , мы можем использовать глобальные переменные, такие как $id и $authordata , а также теги шаблонов, такие как the_title() и the_content() . Без настройки данных публикации мы не смогли бы использовать эти переменные и теги шаблона.

get_pages()

Одной из функций запроса, которой не уделяется много внимания, является get_pages() запрос. В отличие от всех других запросов в этом посте, которые так или иначе связаны с WP_Query , get_pages() — это функция, которая обходит WP_Query и напрямую запрашивает базу данных.

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

Кроме того, get_pages() позволяет указать несколько параметров запроса, уникальных для иерархических типов записей, включая 'child_of' , 'parent' и 'hierarchical' . Доступ к этим параметрам является основной причиной, по которой вы можете рассмотреть возможность использования этого конкретного запроса.

Применение теории на практике

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

  • Подробное руководство по преодолению WP_Query
  • Объяснение цикла WordPress
  • Как расположить записи WordPress в любом порядке
  • Разработка WordPress для пользователей среднего уровня: запросы и циклы
  • 5 простых методов создания пользовательских запросов в WordPress

Резюме

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

  • WP_Query : универсальный класс, который поддерживает большинство запросов WordPress. Он гибкий и может использоваться для создания любого типа запроса.
  • pre_get_posts : хук, который можно использовать для уточнения объекта $query перед запросом к базе данных, тем самым безопасно изменяя запрос по умолчанию. Используйте его вместе с условными тегами для уточнения результатов стандартного запроса.
  • query_posts() : мощный экземпляр WP_Query , который заменяет объект $query по умолчанию и не предназначен для разработки тем или плагинов. Не используйте его.
  • get_posts() : экземпляр класса WP_Query , который возвращает массив сообщений.
    Он включает в себя ряд значений по умолчанию, которые могут сэкономить вам несколько нажатий клавиш по сравнению с созданием собственного экземпляра WP_Query , но только если параметры по умолчанию соответствуют вашим потребностям.
  • get_pages() : функция, которую можно уточнить с помощью иерархических параметров и которая возвращает массив иерархических типов записей, таких как страницы или иерархические пользовательские типы записей.

Метки:

Как получить все посты из запроса wp в результатах поиска в wordpress

1 ответ на этот вопрос.

0 голосов

Связанные вопросы в PHP

Привет @картик, Если вы используете PDO, используйте PDO::lastInsertId. Если вы …

ПОДРОБНЕЕ

ответил 22 окт. 2020 г. в PHP к Нирой • 82 840 баллов • 1540 просмотров

  • PHP
  • HTML
  • CSS
  • JavaScript
  • ларавель

Привет @картик, __CLASS__ всегда возвращает имя . .. ПОДРОБНЕЕ

ответил 27 окт. 2020 г. в PHP к Нирой • 82 840 баллов • 392 просмотра

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • PHP
  • узлов

Привет @картик, Предположим, item_id – это целочисленный столбец идентификации в таблице items … ПОДРОБНЕЕ

ответил 9 апр, 2020 в PHP к Нирой • 82 840 баллов • 9614 просмотров

  • HTML
  • CSS
  • JavaScript
  • PHP
  • ларавель

Привет @картик, Это действительно даст результат… ПОДРОБНЕЕ

ответил 8 мая 2020 г. в PHP к Нирой • 82 840 баллов • 2372 просмотра

  • HTML
  • CSS
  • JavaScript
  • PHP
  • ларавель

Привет К сожалению, нет, вы должны знать … ПОДРОБНЕЕ

ответил 23 апр. 2020 г. в веб-разработке к Чьянит • 160 баллов • 1564 просмотра

  • HTML
  • CSS
  • JavaScript
  • PHP
  • MySQL
  • linux-база данных
  • линукс
  • узлов

Привет ребята, Может ли кто-нибудь помочь мне найти … ПОДРОБНЕЕ

17 января 2020 г. в веб-разработке к анонимный • 37 510 баллов • 540 просмотров

  • HTML
  • CSS
  • JavaScript
  • узлов
  • PHP
  • sql

Рассмотрим следующий блок:

ПОДРОБНЕЕ

ответил 20 января 2020 г. в веб-разработке к Нирой • 82 840 баллов
отредактировано 21 января 2020 г. от Нирой • 544 просмотра

  • угловой
  • HTML
  • CSS
  • JavaScript
  • узлов
  • PHP

Привязка данных – это синхронизация данных между . .. ПОДРОБНЕЕ

ответил 23 января 2020 г. в веб-разработке к Нирой • 82 840 баллов • 492 просмотра

  • HTML
  • CSS
  • JavaScript
  • угловой
  • PHP

Привет @картик, Каждое видео на YouTube имеет четыре сгенерированных … ПОДРОБНЕЕ

ответил 16 июня 2020 г. в PHP к Нирой • 82 840 баллов • 4126 просмотров

  • JavaScript
  • PHP
  • HTML
  • CSS
  • ларавель

Привет @картик, Если ваш сервер PHP разрешает URL … ПОДРОБНЕЕ

ответил 6 октября 2020 г. в PHP к Нирой • 82 840 баллов • 3435 просмотров

  • HTML
  • CSS
  • JavaScript
  • ларавель
  • PHP
  • Я хочу напечатать от 1 до 100 чисел, используя массивы только в Javascript 16 ноября 2022 г.
  • Не удается прочитать свойство «push» неопределенного при объединении массивов 2022
  • Когда дженерики Java требуют вместо и есть ли недостатки переключения? 29 сентября, 2022
  • Для чего полезно ключевое слово volatile? 29 сентября 2022 г.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *