Когда WordPress получает URL для парсинга от веб-сервера, он разбирает знаки в этом URL и конвертирует их в параметры для запроса базы данных. Вот несколько более детальное описание того, что происходит при управлении экземпляром WP_Query.
WP_Query это класс, определенный в WordPress, который облегчает создание собственных циклов. И query_posts(), и get_posts( ) используют классWP_Query для возврата контента WordPress.
Когда вы используете query_posts(), глобальная переменная$wp_query используется как копия WP_Query, делая$wp_query хранилищем данных по умолчанию для нескольких операций. Произвольные циклы могут использоваться где угодно в файлах шаблона темы для отображения различных типов содержимого. Они должны создавать отдельные экземпляры переменной WP_Query.
Когда вы создаете новый объект WP_Query, он обладает несколькими предустановленными функциями для построения запросов, выполнения запросов для получения записей и парсинга параметров из URL. Однако вы можете использовать эти встроенные объектные методы для построения собственных строк параметров и создания произвольных циклов, которые извлекают любой необходимый контент, указанный в цикле.
Ниже приведен пример произвольного цикла, отображающего десять последних записей на сайте:
1 2 3 4 5 6 7 8 |
<?php $myPosts = new WP_Query( 'posts_per_page=10' ); while ($myPosts->have_posts() ) : $myPosts->the_post(); ?> // тут делаем что нам нужно <?php endwhile; ?> |
Вместо использования несложных вызовов have_posts() и the_post(), которые вы видели в базовом цикле, произвольный цикл вызывает методы заново созданного объекта WP_Query $myPosts.
Явный вызов процедуры, показанный здесь, и вызов по умолчанию have_posts() функционально эквиваленты, have_posts(), например, представляет собой просто вызов $wp_query->have_posts() с использованием глобальной переменной запроса для запроса по умолчанию, то есть той, которая сгенерирована из парсинга URL, переданного WordPress веб-сервером.
Переход к циклу по умолчанию от URL вызывает WordPress. Есть дополнительный шаг, который состоит в том, что осуществляется парсинг URL для получения нужной строки запроса с использованием метода parse_query() объекта запроса.
При построении произвольного цикла вы подробно задаете параметры, контролирующие запрос. Вот более детальная информация о том, что происходит внутри функции запроса:
- Вызов $myPosts->query() конвертирует параметры в SQL-операторы посредством функции $myPosts->get_posts(), которая затем выполняет запрос к базе данных MySQL и извлекает запрошенный контент.
- Что не менее важно, вызов запроса устанавливает условные теги, такие как is_home() и is_single(), которые зависят от типа отображаемой страницы и количества контента для нее.
- Массив записей, возвращаемый запросом, кэшируется WordPress, чтобы будущие обращения с тем же запросом не генерировали дополнительно трафик для базы данных.
Чтобы строить мощные произвольные циклы, необходимо правильно трансформировать критерии выбора контента в набор параметров запроса.
Интересное видео по теме: