В статье рассмотрим понятие Query Posts WordPress. Выясним для чего нужно, и дадим рекомендации в каких случаях применять.
Что означает?
Это способ создания цикла Вордпресс (The Loop) с использованием функции query_posts()
. Технически аналогичен стандартной выборке ВП, которая начинается с if( have_posts() ) {...}.
Общий синтаксис
<?php query_posts( $args ); // $args - параметры запроса // The Loop if ( have_posts() ) { while ( have_posts() ) { the_post(); } wp_reset_query(); } else { } ?>
Когда использовать?
При изменении основного запроса (со своими параметрами) или создания своего.
Применяется чтобы:
- управлять выводом рубрик на главной;
- менять число записей, параметры сортировки, постраничную навигацию.
Примеры
Вариант 1. Изменение стандартного запроса
global $query_string; query_posts( $query_string .'&cat=-55&order=ASC&posts_per_page=25' ); wp_reset_query();
Переменная $query_string
хранит данные основной выборки. Мы ее нарушили: исключили категорию с ID
равной 55, отсортировали посты в алфавитном порядке, выставили их количество – 25.
Последняя строка возвращает ход основного запроса. Это нужно потому что мы переписываем содержимое $wp_query
.
Вариант 2. Своя выборка
query_posts( ‘category_name=music&orderby=title&order=ASC’ );
В итоге будут показаны упорядоченные по названию и алфавиту статьи из категории music. Если вставить date
вместо title
, то отсортируются по дате.
Этот подход создаст новый запрос. Поэтому нужно действовать осторожно.
Параметры еще можно организовать как массив.
global $query_string; parse_str( $query_string, $args ); $args['post_type'] = array( 'post', 'music' ); query_posts( $args );
Теперь в переборе участвует тип записей music.
Когда не стоит использовать?
query_posts()
заменяет основной цикл WordPress на новый (вторичный). Это происходит после того, как будет выполнен основной запрос. Как только он выполнится, WP помещает его результат в глобальную переменную $wp_the_query
, ссылка на которую хранится в глобальной переменной $wp_query
.
Функция have_posts()
работает именно с $wp_query
. Когда PHP-обработчик находит функцию query_posts()
, он с помощью WP_Query
создает новый вторичный запрос и помещает результат в эту же глобальную переменную $wp_query
. В итоге все функции, которые работают с основным циклом WordPress, начинают выполнять уже вторичный запрос. Основной же остался в $wp_the_query
. После вторичного запроса query_posts()
переходит к основному. В итоге результаты выборки смешиваются, что дает неожиданный результат. Очень часто разработчики забывают использовать конструкцию wp_reset_postdata()
, которая восстанавливает значение глобальной переменной $post
.
Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.
Я не думала что найду, спасибо большое!
Не поняла как это так?