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

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

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

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

WP_Query

« WP_Query Класс позади (почти) каждый запрос WordPress. Когда вы загружаете страницу или статью на WordPress, объект " WP_Query "," $ Query "создается и извлекает данные из соответствующих статей или страниц. В действительности, " WP_Query Это движок, который поддерживает большинство запросов на WordPress.

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

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

<?php
$args = массив(
  // Определим аргументы для нового запроса
);

$myQuery = новый WP_Query($args);

Конечно, тогда вы должны что-то делать с результатами запроса. Тем не менее, это что-то выходит за рамки этого урока.

Как разработчик 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_posts () Это действительно мощный и полезный. Однако, игра с основным циклом означает, что query_posts () Имеет серьезные недостатки и поэтому его следует избегать.

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

Используйте " query_posts () "Может значительно замедлить время загрузки.

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

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

Другими словами, если вы пишете тему или плагин, а это именно то, что делает подавляющее большинство из нас, вам следует избегать использования " query_posts () ». Вместо этого создайте совершенно новый объект » WP_Query »Или используйте« get_posts () "," get_pages () "Или" pre_get_posts .

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