Wordpress

WordPress get posts: get_posts() – Получает записи (посты, страницы, вложения) из базы данных по указанным критериям.

26.12.2022

Получить любые сообщения с помощью WP_Query. WordPress загружает последние 10… | от Прасана | Timeless

WordPress загружает последние 10 сообщений на главной странице и правильные сообщения на страницах архива. Что, если вы хотите отсортировать все свои сообщения и страницы по дате?

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

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

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

Мы создаем новый запрос WordPress, используя класс WP_Query , передавая ему параметры, чтобы указать типы необходимых сообщений. Затем мы вызываем have_posts() и методы the_post() для нашего объекта $scheduled.

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

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

author, author_name, cat, category_name, s (для условий поиска), post_status, post_type являются примерами некоторых более простых полей. Обратите внимание, что некоторые поля, такие как post_status , требуют передачи массива статусов, если вы хотите использовать несколько значений.

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

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

Здесь мы получаем несколько сообщений из нашего типа «книга», добавляя некоторые параметры таксономии. Параметр отношения определяет отношение между двумя массивами. В нашем случае это отношение «и», означающее, что должны быть выполнены оба условия.

Даты могут быть немного сложными, но очень гибкими. В документации WP_Query есть множество примеров, если вам нужна дополнительная информация.

Получить сообщения за определенное время довольно просто. Вы можете использовать год, номер месяца, w (неделя года), день , и пару других параметров, чтобы указать время. Приведенный ниже код извлечет все сообщения за май 2014 года.

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

Попробуйте этот материал на своем сайте WordPress и ответьте ниже, если у вас есть вопросы по нему.

Выбор правильного запроса для разработки 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 9.0024 и загружает все данные сообщения.

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

Как разработчик WordPress вы, вероятно, будете использовать WP_Query чаще, чем любую другую функцию запроса или хук. Он универсальный и мощный. Хотя некоторые другие запросы, описанные в этом посте, в некоторых случаях могут сэкономить вам несколько нажатий клавиш, в целом вы не ошибетесь, выбрав 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() — опасное предложение. На самом деле официальная документация начинается с оговорки: Эта функция полностью переопределит основной запрос, а не предназначена для использования плагинами или темами

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

WPMU DEV AccountPRO

Наши лучшие профессиональные инструменты WP в одном комплекте