Как использовать Query Posts WordPress

В статье рассмотрим понятие 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.

Курс WordPress-разработчик
Если Вам понравилась статья — поделитесь с друзьями
Михаил Петров
Привет! Меня зовут Михаил Петров. Я копирайтер и занимаюсь этим с 2013 года. Скрупулезность и ответственность - моя фишка! Не могу делать как попало и добиваюсь, чтоб заказчик сказал минимум “неплохо”. За все время своей работы пришлось написать и отредактировать немало разной “текстовухи”, включая SEO-тексты, отзывы и прочую чушь. На сегодняшний день специализируюсь на написании информационных статей и руководств технического направления. Вижу смысл и светлое будущее в текстах для людей, а не для машин.
Задать вопрос