Функция QUERY_POSTS() │ WP 1.5.0
Функция query_posts() настраивает цикл WordPress с параметрами запроса.
Важно!
Эта функция полностью заменяет основной запрос и не предназначена для использования плагинами или темами. Ее слишком упрощенный подход к изменению основного запроса может привести к проблемам, и от использования лучше отказаться, когда это возможно. В большинстве случаев существуют более правильные и производительные способы изменения основного запроса, например, через хук pre_get_posts, который используется в WP_Query.
Назначение функции
Эту функцию нельзя использовать внутри цикла WordPress.
Возвращаемые значения
WP_Post[] | Int[] — массив объектов записей или ID записей.
Пример использования
Чтобы использовать query_posts(), достаточно вызвать её с параметрами запроса:
query_posts( $query );
Параметры
$query(обязательный) — массив или строка с аргументамиWP_Query.
Примеры
Пример 1: Получение только первой части контен��а
Если вы хотите использовать функцию "Читать далее" с новым запросом, вам нужно установить глобальную переменную $more в значение 0:
Пример 2: Передача параметров в массиве
Параметры можно также передавать в виде массива. Это делает их более ясными и удобными для чтения.
query_posts([
'cat' => 22,
'year' => $current_year,
'monthnum' => $current_month,
'order' => 'ASC',
]);
Пример 3: Исключение записей из категории 3 на главной странице
Для этого лучше использовать хук pre_get_posts. Чтобы исключить записи из категории 3 на главной странице вашего блога, нужно вставить следующий код в шаблоны front-page.php или home.php перед тем, как начнется цикл WordPress:
if ( is_home() ) {
query_posts('cat=-3');
}
Вы можете также исключить больше категорий:
if ( is_home() ) {
query_posts("cat=-1,-2,-3");
}
Пример 4: Передача переменных в параметры запроса
Можно создать динамические параметры запроса, если хотите, чтобы запрос изменялся в зависимости от обстоятельств. Для этого напишите значение параметра в переменную и передайте эту переменную в параметры запроса несколькими способами:
1) Сборка запроса с помощью одинарных кавычек '':
2) Сборка запроса с помощью двойных кавычек "":
Переменные внутри двойных кавычек интерпретируются PHP как переменные, а не простой текст:
3) Использование глобальной переменной $query_string:
Эта переменная содержит основной запрос для функции query_posts(). Если мы хотим сохранить стандартный вывод записей WordPress (например, на странице категории), но убрать постраничную навигацию (отобразить все записи на одной странице), можно добавить параметр posts_per_page=-1:
4) Добавление параметров к запросу:
Чтобы сохранить основной запрос текущей страницы и добавить к нему свои параметры.
Функция query_posts() полностью переписывает запрос. Например, если мы напишем query_posts('cat=1'), другие параметры запроса, используемые на текущей странице (например, сортировка, постраничная навигация и т.д.), будут потеряны, и будут отображаться записи категории 1 с другими Параметрами по умолчанию.
Чтобы сохранить основные параметры запроса и дополнить/заменить их своими, используйте функцию PHP array_merge():
global $wp_query;
query_posts(array_merge(
['cat' => 1], // этот параметр мы добавили
$wp_query->query // это массив основных параметров запроса текущей страницы
));
Пример 5: Изменение параметра posts_per_page для конкретной категории
Параметр "Блоговые страницы показывают максимум" в Настройки > Чтение может повлиять на ваши результаты. Чтобы этого избежать, добавьте параметр posts_per_page. Например:
// Если запрос относится к категории 'category-slug', изменяем количество записей
if (is_category('category-slug')) {
query_posts([
'posts_per_page' => 999
]);
}
Используйте этот код в шаблоне category.php.
Пример 6: Получение конкретной записи/страницы по ID или slug
Не рекомендуется использовать query_posts() для этой цели, вместо этого используйте get_posts() или get_post().
Получение одной записи (с ID = 5):
Получение одной страницы с ID 7:
Получение страницы по её slug:
Получение дочерней страницы.
Для дочерних страниц вам нужно указать имя родительской страницы и самой дочерней страницы, разделив их слэшем (/). Пример:
Примечания
- Глобальная переменная
WP_Query.$wp_query— объект запроса WordPress.
Изменения
Функция была представлена в версии 1.5.0.
Код функции QUERY_POSTS()
function query_posts($query) {
$GLOBALS['wp_query'] = new WP_Query();
return $GLOBALS['wp_query']->query($query);
}
Похожие функции
get_posts()get_post()have_posts()wp_reset_query()WP_Query()
Используйте приведенные примеры и описания, чтобы лучше понять работу функции query_posts() и эффективно применять ее в ваших проектах на WordPress.