Функция QUERY_POSTS() в WordPress: как использовать и примеры

Функция 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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *