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