Аргументы WP_Query: рубрики и теги
Работа с аргументами WP_Query дает возможность эффективно управлять выводом записей по рубрикам и тегам. Знание ключевых параметров помогает точнее настраивать запросы и улучшать отображение контента на сайте.
Вы узнаете, как использовать аргументы для рубрик и тегов, разберете их различия и увидите практические примеры. Вы научитесь применять WP_Query так, чтобы получать оптимальный результат при организации контента на сайте.
Вспоминаем, как работают аргументы в WP_Query
Когда вы используете WP_Query в темах оформления или плагинах, приходится включать в код четыре основных элемента:
- Аргументы запроса, в которых используются параметры, с которыми мы познакомимся в сегодняшней статье;
- Сам запрос;
- Цикл;
- Завершающий этап: сброс данных записи.
На практике это выглядит следующим образом:
<?php
$args = array(
// Аргументы для вашего запроса
);
// Произвольный запрос
$query = new WP_Query( $args );
// Проверка наличия результатов запроса
if ( $query->have_posts() ) {
// начало цикла обработки данных из результатов запроса
while ( $query->have_posts() ) {
$query->the_post();
// содержимое опрашиваемой записи
}
}
// восстановление исходных данных записи
wp_reset_postdata();
?>Аргументы сообщают WordPress, какие данные нужно извлекать из базы данных. Давайте сосредоточим внимание на самом начале кода:
$args = array(
// Аргументы для вашего запроса
);
Как видно, аргументы заключены в массив.
Создаем код для аргументов
Аргументы задаются в массиве следующим образом:
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);Вам следует заключать параметры и их значения в одинарные кавычки, а также использовать => между ними. Аргументы разделяются запятой. Если здесь что-то сделать неправильно, то WordPress может опросить не все указанные вами аргументы, и в итоге ничего не выведется на экран.
Параметры категорий
Давайте начнем с параметров категорий:
- cat (int): используем id категории;
- category_name (string): используем slug категории (не name );
- category__and (array): используем id категории;
- category__in (array): используем id категории;
- category__not_in (array): используем id категории.
Учтите, что ни в одном из приведенных случаев мы не используем название категории. Даже в параметре category_name в качестве значения используется slug. Я предпочитаю использовать именно этот параметр, а не ID, так как это позволит быстрее разобраться в готовом коде позже, если возникнет необходимость что-нибудь изменить.
Но если вам кажется, что редакторы или модераторы вашего сайта могут изменить slug категории в будущем, то рекомендую вам использовать ID.
Параметр cat
Параметр cat довольно простой: в нем используется ID отдельной категории или строка, состоящая из ID нескольких рубрик. Запрос к отдельной категории выглядит следующим образом:
$args = array(
'cat' => '12'
);Запрос к нескольким категориям:
$args = array(
'cat' => '12, 13, 14'
);Приведенные выше запросы сообщают WordPress о необходимости извлекать записи только из определенной или определенных категорий. Если вам нужно найти записи во всех категориях, то следует использовать параметр category_and.
Параметр cat также можно использовать для поиска записей в определенной категории, исключив какую-то другую. Для этого нужно поставить минус перед ID исключаемой категории:
$args = array(
'cat' => '12, -13'
);Приведенный выше запрос направлен к записям категории 12, но не к постам категории 13.
Параметр category_name
В параметре category_name используется slug, а не name. Можно использовать его как для отдельной категории, так и для нескольких. Или находить записи, находящиеся в этих категориях.
Чтобы выполнить запрос к записям из определенной категории, используйте следующий код:
$args = array(
'category_name' => 'my-slug'
);Поиск записей в одной или нескольких категориях:
$args = array(
'category_name' => 'my-slug, your-slug, another-slug'
);Как и в случае с параметром cat, этот запрос не направлен к записям, находящимся во всех категориях, но позволяет находить записи из любой указанной рубрики.
Параметр category__and
Если вам нужно найти записи во всех категориях из массива, то следует использовать этот параметр. В качестве значения он принимает ID рубрик. В приведенном ниже примере производится поиск постов из трех перечисленных категорий:
$args = array(
'category__and' => array(
'12',
'13',
'14'
)
);Учтите, что параметр использует массив, а не строку запроса. Обратите внимание, что в названии параметра используется сразу два знака подчеркивания. Если вы напишите только один знак, то параметр не будет работать.
Параметр category__in
Позволяет находить записи из одной или более категорий в массиве. Он работает по тому же принципу, что и параметр cat: использует ID рубрик в качестве значения.
Запрос к одной или нескольким категориям из массива:
$args = array(
'category__in' => array(
'12',
'13',
'14'
)
);Приведенный выше код позволит извлечь записи из одной или нескольких категорий.
Параметр category__not_in
Параметр category__not_in осуществляет запрос записей, которые не находятся в определенной категории из массива.
Чтобы исключить записи из определенной категории, следует использовать следующий код:
$args = array(
'category__not_in' => '12'
);Исключение записей, находящихся в категориях из массива:
$args = array(
'category__not_in' => array(
'12',
'13',
'14'
)
);Приведенный выше код исключает записи, которые находятся в любой из отмеченных категорий.
Параметры тегов
Существуют следующие параметры тегов:
- tag (string): используем slug тега;
- tag_id (int): используем id тега;
- tag__and (array): используем несколько id тегов;
- tag__in (array): используем несколько id тегов;
- tag__not_in (array): используем несколько id тегов;
- tag_slug__and (array): используем slug тегов;
- tag_slug__in (array): используем slug тегов.
Параметр tag
Параметр tag в качестве значения использует slug тега, и его можно использовать для поиска записей с одним установленным тегом или при помощи строки запроса с несколькими тегами.
Чтобы найти записи с одним тегом, используется код:
$args = array(
'tag' => 'my-tag'
);Поиск сообщений с тегами из массива:
$args = array(
'tag' => 'my-tag, your-tag, another-tag'
);Приведенный выше код выполняет запрос записей, в которых используется любой из тегов в массиве, а не сразу все указанные.
Параметр tag_id
Параметр tag_id работает по принципу параметра cat: использует ID тега, и его можно использовать как с одним, так и с несколькими тегами. Чтобы найти записи с отдельным тегом, можно использовать следующий код:
$args = array(
'tag_id' => '21'
);Чтобы найти записи с одним и более ID тегов, нужно воспользоваться этим кодом:
$args = array(
'tag_id' => '21, 22, 23'
);tag_id также можно использовать для исключения тегов как при работе с отдельными тегами, так и с несколькими. Чтобы осуществить запрос всех записей, за исключением тех, где имеется определенный тег, нужно использовать следующий код:
$args = array(
'tag_id' => '-21'
);Чтобы найти записи с одним или несколькими тегами, но без определенного тега, можно воспользоваться следующим кодом:
$args = array(
'tag_id' => '21, -22, 23'
);Приведенный выше код выполняет запрос записей с тегами 21 или 23, но без тега 22.
Параметр tag__in
Этот параметр позволяет находить записи с одним или более тегом из массива. Он работает по тому же принципу, что и tag:
$args = array(
'tag_in' => array(
'21',
'22',
'23'
)
);Этот код выполняет запрос записей с любым или всеми перечисленными тегами. Если вам нужно найти записи со всеми тегами, то лучше использовать параметр tag__and, о котором я расскажу чуть позже.
Параметр tag__not_in
tag__not_in позволяет делать запрос записи, в которой отсутствует определенный тег или теги из массива.
Чтобы исключить из поиска записи с определенным тегом, используйте следующий код:
$args = array(
'tag__not_in' => array( '21' )
);Учтите, что вам все равно нужно будет использовать массив, даже если вы работаете с каким-то конкретным тегом. Если нужно указать больше тегов, код должен быть таким:
$args = array(
'tag__not_in' => array(
'21',
'22',
'23'
)
);Этот код осуществляет запрос записей, в которых отсутствуют любые из приведенных выше тегов.
Параметры tag_slug__and и tag_slug__in
Эти два параметра работают абсолютно по тому же принципу, что и параметры tag__and и tag__in, за исключением того, что здесь вместо ID используются slug тегов.
Чтобы найти записи, в которых используются оба тега из пары, нужно использовать tag__slug_in:
$args = array(
'tag_slug__in' => array(
'my-tag',
'your-tag',
'another-tag'
)
);Этот код осуществляет поиск записей с любым из этих тегов. Вы также можете использовать параметр tag со строкой запроса, состоящей из коротких имен тегов, и получите тот же результат. Чтобы включить записи со всеми указанными тегами, используйте параметр tag_slug__and следующим образом:
$args = array(
'tag_slug__and' => array(
'my-tag',
'your-tag',
'another-tag'
)
);Вместо того чтобы запрашивать записи с любым из тегов, этот код позволяет осуществить запрос только тех записей, в которых используются сразу все указанные теги.
В завершение
Используя приведенные выше параметры и комбинируя их, вы сможете создавать многофункциональные аргументы, и извлекать необходимые вам данные.
Комментарии