У попередніх статтях цієї серії ми встигли познайомитися зі структурою класу WP_Query, а також його параметрами і методами. Тепер настав час зрозуміти, як використовувати різні аргументи.

Сьогодні я б хотіла познайомити вас із двома типами аргументів: для рубрик і тегів.
Аргументи для цих двох класифікацій схожі, але все-таки відрізняються, і щоб ефективно їх використовувати, важливо розуміти цю різницю.

Згадуємо, як працюють аргументи в WP_Query

Коли ви використовуєте WP_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’
)
);

Замість того щоб запитувати запису з будь-яким з тегів, цей код дозволяє здійснити запит тільки тих записів, у яких використовуються всі зазначені теги.

На завершення

Використовуючи наведені вище параметри і комбінуючи їх, ви зможете створювати багатофункціональні аргументи, і отримувати необхідні вам дані.

Переклад статті «WP_Query Arguments: Categories and Tags» був підготовлений дружною командою проекту Сайтостроение від А до Я.