Аргументы 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'    ));

Вместо того чтобы запрашивать записи с любым из тегов, этот код может осуществить запрос только тех записей, в которых используются сразу же все указанные теги.

В завершение

Используя приведенные выше настройки и комбинируя их, вы сможете без проблем создавать многофункциональные аргументы, и извлекать необходимые вам данные.

Добавить комментарий

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