В статье рассмотрим понятие 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.
Нажмите, пожалуйста, на одну из кнопок, чтобы узнать понравилась статья или нет.
Я не думала что найду, спасибо большое!
Не поняла как это так?