Функция query_posts в WordPress

У системы управления сайтом WordPress есть функции, которые сделаны для служебного пользования. То есть они сделаны только для системы. Но нет прямого запрета на их использование для программистов. К таким функция относится "query_posts". Поговорим о ней.

Функция "query_posts" возвращает список записей, создаёт Цикл WordPress. По своему назначению эта функция - синоним "WP_Query", который мы рассматривали в статье "Класс WP_Query в WordPress". Но она сделаны для служебных нужд WordPress и её использование может привести к сбоям в системе. Опишем их чуть подробнее.

WordPress формирует запрос к базе данных, основываясь на адрес URL страницы, настрочки ЧПУ (человеко понятный URL - типа транслитерации: "/eda/salat/cesar") и другие параметры. Таким образом система формирует особый запрос для выборки нужной записи или рубрики. Если же странице вызвать функцию "query_posts" вручную, то результаты её работы перезапишут результаты этого внутреннего запроса от системы. Из-за чего WordPress не сможет определить на какой странице находится, сколько записей выводить и т.п.

В отличии от класса "WP_Query" функция "query_posts" изменяет глобальную переменную "$wp_query". Если Вам пришлось использовать функцию "query_posts" в своём коде, то обязательно после неё вызывайте "wp_reset_query", чтобы установить значения глобальный переменных в начальное состояние.

Использование функции "query_posts"

Функция "query_posts" практически ничем не отличается в использовании от класса "WP_Query". То есть это функция, которая позволяет получить публикации из базы данных с самыми разными критериями. К примеру, можно получить публикации за определённое время, из определённых категории или с указанием значений произвольных полей. Единственная разница в том, что "query_posts" записывает результат прямо в глобальные переменные.

Рассмотрим запрос, сделанный с помощью этой функции:
<?php
query_posts( [ 'category_name' => 'food' ] );
while(have_posts()){
   the_post();
   
   echo '<h2>' . get_the_title() . '</h2>';
   echo get_the_content();
}
wp_reset_query();
С помощью такого кода в глобальную переменную будут записаны публикации из базы данных, которые находятся в рубрике "food" (еда). Далее по коду мы использовали функции цикла WordPress, с помощью которых выводим заголовок и содержание каждой полученной публикации.
Функция "query_posts" должна находиться в коде до вызова Цикла WordPress, потому что она создаёт новый объект "$wp_query", который будет использоваться в цикле. После неё WordPress не учитывает параметры, полученные в URL. Если хотите сохранить параметры оригинального запроса, то можете взять параметры текущего в глобальной переменной "$query_string".
Как можно заметить, первым аргументом в функцию "query_posts" передаётся массив. Этот массив содержит параметры фильтра. Давайте попробуем вынести его в отдельную переменную и добавить условий:
<?php
$filter = array(
   'category_name' => 'food', // фильтр по категории
   'posts_per_page' => 5, // ограничение количества результатов на странице
   'orderby' => 'comment_count' // сортировка по убыванию количества комментариев
);
query_posts( $filter );
...
Перечислим возможные ключи фильтрации выборки и описания к ним:
Ключ Тип Описание
attachment_id число ID вложения. Используется если в "post_type" указано значение "attachment" .
author число/строка ID автора публикаций или разделённые запятыми ID авторов.
author_name строка Имя автора.
author__in массив Массив из ID авторов (логика "ИЛИ").
author__not_in массив Массив из ID авторов, от которых не выводить публикации (логика "НЕ").
cache_results true/false Кешировать ли полученную информацию публикации. По умолчанию: true
cat число/строка ID категории или строка из ID, разделённых запятыми (логика "ИЛИ")
category__and массив Массив из ID категорий, в которых должна быть публикация (логика "И")
category__in массив Массив из ID категорий, в которых может быть публикация (логика "ИЛИ")
category__not_in массив Массив из ID категорий, в которых не должно быть публикации (логика "НЕ")
category_name строка Ярлык категории (не тег)
comment_count массив/число Фильтрует результат по количеству комментариев. Если указано число, то покажет записи именно с таким количеством комментариев. Можно указать массив с ключами 'value' и 'compare', чтобы получилось так:

array('value' => 5, 'compare' => '<') // меньше 5 комментариев

В значении 'compare' можно использовать операторы сравнения: '=', '!=', '>', '>=', '<', '<=' .
comment_status строка Статус комментариев, нужно которые получить.
comments_per_page число Количество комментариев, которое нужно отобразить. По умолчанию: 'comments_per_page'
date_query массив Ассоциативный массив аргументов WP_Date_Query
day число Число (день месяца) в диапазоне от 1 до 31. По умолчанию: ''
exact true/false Делать ли поиск по точному совпадению со словом. По умолчанию: false
fields строка Возвращаемые данные. Принимает значения:
'' - возвращает объект "WP_Post".
'ids' - возвращает массив из ID публикаций.
'id => parent' - возвращает массив из ID родительских записей
По умолчанию: ''
hour число Час (значение от 0 до 23). По умолчанию: ''
ignore_sticky_posts true/false Не включать в выборку прикреплённые публикации. Если указано "false", то исключает прикреплённые публикации из "post__in". По умолчанию: false
m число Комбинация из года и месяца (4 цифры года и 2 цифры месяца). К примеру, "202010". По умолчанию: ''
meta_compare строка Оператор для сравнения со значением 'meta_value'.
meta_compare_key строка Оператор для сравнения со значением 'meta_key'.
meta_key строка Ключ (название) произвольного поля.
meta_query массив Ассоциативный массив из аргументов WP_Meta_Query.
meta_value строка Значение произвольного поля.
meta_value_num число Цифровое значение произвольного поля.
meta_type_key строка Тип значения поля 'meta_key'. Смотрите подробнее "WP_Meta_Query"
menu_order число Порядковый номер в списке меню.
monthnum число Месяца публикации (от 1 до 12). По умолчанию: ''
name строка Ярлык публикации.
nopaging true/false Отключить постраничную навигацию, выводить все публикации без разбиения на страницы. По умолчанию: false
no_found_rows true/false Не считать количество полученных записей. Включение улучшает производительность. По умолчанию: false
offset число Количество публикаций, которые надо пропустить с начала выборки.
order строка Направление сортировки выборки. Возвращает 'ASC' или 'DESC'. По умолчанию: 'DESC'
orderby строка/массив Сортируем полученные публикации по параметру. Можно передать несколько опций массивом. Если нужно использовать сортировку по "meta_value" или "meta_value_num", то "meta_key=keyname" должно быть задано.

Принимает слудющие значения: 'none', 'name', 'author', 'date', 'title', 'modified', 'menu_order', 'parent', 'ID', 'rand', 'relevance', 'comment_count', 'meta_value', 'meta_value_num', 'post__in', 'post_name__in', 'post_parent__in'

По умолчанию сортировка идёт по дате ('date')
p число ID публикации.
page число Номер для статической домашней страницы. Показывает записи, которые в обычном режиме должны были быть показаны на странице пагинации Х главной статической странице.
paged число Порядковый номер страницы.
page_id число ID страницы.
pagename строка Ярлык страницы.
perm строка Права доступа для публикаций.
ping_status строка Статус пинга.
post__in массив Массив ID публикаций, которые необходимо включить в выборку. Прикреплённые публикации тоже будут включены.
post__not_in массив Массив ID публикаций, которые не надо получать (логика "НЕ И").
post_mime_type строка MIME тип публикаций. Используется, если в "post_type" указано щначение "attachment".
post_name__in массив Массив ярылоков публикаций (логика "ИЛИ").
post_parent число ID родительских публикаций. В значении "0" возвращает все публикации корневого уровня.
post_parent__in массив Массив родительских публикаций, из которых брать записи (логика "ИЛИ").
post_parent__not_in массив Массив родительских публикаций, из которых нельзя брать записи (логика "НЕ").
post_type строка/массив Ярлык типа публикации или массив из них. По умолчанию: 'any'
post_status строка/массив Статус публикации (или массив из статусов).
posts_per_page число Количество публикаций на странице. В значении "-1" возвращает все публикации.
posts_per_archive_page число Количество публикаций на странице архива. Перезаписывает ключ "posts_per_page", если "is_archive" или "is_search" находятся в положении "true".
s строка Фраза для поиска. Если поставить перед словом дефис, будут исключены сообщения, включающие это слово. К примеру, "сыр - мышь" вернёт публикации, которые содержат слово "сыр", но не содержат слово "мышь". Знак исключения (тире) может быть изменён на другой, используя фильтр 'wp_query_search_exclusion_prefix'.
second число Секунды публикации (цифра от 0 до 60). По умолчанию: ''
sentence true/false Поиск по фразе. По умолчанию: false
suppress_filters true/false Не учитывать фильтры. По умолчанию: false (учитывать)
tag строка Ярлыки тегов, разделённые запятыми.
tag__and массив Массив ID тегов (логика: "И")
tag__in массив Массив ID тегов (логика: "ИЛИ")
tag__not_in массив Массив ID тегов (логика: "НЕ")
tag_id число ID тегов или список ID тегов через запятую.
tag_slug__and массив Массив тегов или ярлыков тегов (логика: И)
tag_slug__in массив Массив тегов или ярлыков тегов (логика: ИЛИ). Работает если 'ignore_sticky_posts' включен в "true". Указываются именно теги. Указание ID тегов работать не будет.
tax_query массив Ассоциативный массив из аргументов функции WP_Tax_Query.
title строка Заголовок публикации.
update_post_meta_cache true/false Обновлять или нет кеш публикации. По умолчанию: true
update_post_term_cache true/false Обновлять или нет кеш мета информации. По умолчанию: true
lazy_load_term_meta true/false Загружать ли мета информацию из кеша. Положение "false" отключает кеш запроса для мета информации. Поэтому каждый вызов функции "get_term_meta" начинает делать запрос к базе данных. По умолчанию: значение из переменной $update_post_term_cache
w число Номер недели (цифра от 0 до 53). По умолчанию: ''
year число Год публикации (4 символа). По умолчанию: ''
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб