
Использование запросов WP_Query в WordPress — часть 7 (аргументы для получения категорий, тегов)
Этот практический урок будет посвящен рассмотрению аргументов, которые можно использовать для получения публикаций определенных категорий и тегов с помощью запроса WP_Query в ВордПресс.
Из предыдущих частей этой серии уроков вы узнали о структуре запроса WP_Query
и некоторых его свойствах и методах. Также мы перешли к практическому освоению и пониманию аргументов, в частности, при получении постов, страниц и публикаций определенного типа.
Поскольку в запросе WP_Query
имеется множество возможных аргументов, их рассмотрение разделено на подтемы. И сегодняшняя тема — аргументы для получения из базы данных публикаций на основе их категорий и тегов. Хотя эти две таксономии схожи между собой, однако имеют некоторые отличия, о которых вам нужно знать.
Параметры аргументов запроса для получения публикаций по категории
Начнем с рассмотрения параметров категории. Вы можете использовать один из следующих вариантов:
- использование идентификатора категории:
cat
(int) - использование слага категории (НЕ имя):
category_name
(string) - использование массива «вхождения» идентификаторов категории:
category__and
(array) - использование массива «вхождения» идентификаторов категории:
category__in
(array) - использование «исключающего» массива идентификаторов категории:
category__not_in
(array)
Важный момент: «опасно» использовать название категории, а также ее слаг, поскольку это можно в любой момент изменить. А идентификатор (ID) — это неизменная вещь, использование которой позволит вам избежать потенциальных проблем.
А теперь давайте перейдем к отдельному рассмотрению каждого из этих параметров.
Параметр cat
аргументов запроса по категории
Параметр cat
прост: достаточно указать один идентификатор категории (ID) или строку из идентификаторов категории, как показано ниже:
<?php $args = array( 'cat' => '8' // ID одной нужной категории // если нужно несколько категорий, тогда используйте строку с ID // 'cat' => '5, 6, 7' // ID нескольких нужных категорий — string // если нужно исключить категорию из запроса — поставьте перед ID знак минуса // 'cat' => '9, -10' // чтобы исключить категорию под ID 10 ); ?>
Пример кода выше прикажет движку извлечь из базы данных публикации из любой из перечисленных категорий. Если вам нужны публикации в каждой из массивов категорий, то используете параметр category_and
(об этом далее).
Чтобы исключить категорию из запроса, используйте запись ID категории в cat
со знаком минус перед ним, как показано в примере.
Параметр category_name
аргументов запроса по категории
Параметр category_name
использует слаг категории (! не имя). Подобно предыдущему примеру можно использовать параметр с отдельной категорией или со списком категорий в строке:
<?php $args = array( // запрос публикаций из одной категории: 'category_name' => 'slag-kategoriyi' // слаг нужной категории // чтобы найти публикации в нескольких категориях: // 'category_name' => 'slag-kategoriyi, drugaya-kategoriya, esche-odin-slag' // слаг нужных категорий ); ?>
Параметр category__and
аргументов запроса по категории
Если вам нужна публикация во всех категориях, используйте этот параметр. Сюда следует передавать идентификаторы категории (ID). Например, чтобы найти публикации во всех трех категориях, вот как может выглядеть запись аргументов:
<?php $args = array( // массив нужных категорий: 'category__and' => array( '7', '8', '9' ) ); ?>
Обратите внимание на следующие моменты: здесь используется массив, а не строка; в названии параметра два символа подчеркивания (штрих снизу, андерскор), а не один.
Параметр category__in
аргументов запроса по категории
Этот параметр используется для поиска публикаций в одной или нескольких из массива категорий. Так же принимает идентификатор категории в качестве значения:
<?php $args = array( // для получения публикаций в одной или нескольких категориях: 'category__in' => array( '7', '8', '9' ) ); ?>
Параметр category__not_in
аргументов запроса по категории
Если нужны категории, кроме указанных, тогда для вас есть параметр category__not_in
— он именно так и работает:
<?php $args = array( // чтобы исключить публикации из одной категории: 'category__not_in' => '11' // ID одной категории для исключения // чтобы исключить публикации из массива (нескольких) категорий: // 'category__not_in' => array( '7', '9' ) ); ?>
Параметры аргументов запроса для получения публикаций по тегам
Параметры тегов схожи, но несколько отличаются от параметров категорий:
- использование слага тега:
tag
(string) - использование идентификатора тега:
tag_id
(int) - использование массива «вхождения» идентификаторов тегов:
tag__and
(array) - использование массива «вхождения» идентификаторов тегов:
tag__in
(array) - использование массива «исключающих» идентификаторов тегов:
tag__not_in
(array) - использование «совокупного» массива слагов тегов:
tag_slug__and
(array) - использование массива «вхождения» слагов тегов:
tag_slug__in
(array)
Теперь уделим внимание каждому из них.
Параметры tag
аргументов запроса по тегу
Параметр tag
принимает значение слага тега (! не название) и ему можно передать одно или несколько значений в строке:
<?php $args = array( // чтобы найти публикации только по одному тегу: 'tag' => 'moy-tag' // слаг одного тега // найти публикации по нескольким тегам: // 'tag' => 'moy-tag, second-tag, drugoy-tag' // перечислены все желаемые теги (их слаги) ); ?>
Параметры tag_id
аргументов запроса по тегу
Параметр tag_id
принимает идентификатор тега (по аналогии с cat
) и может работать с одним или несколькими ID тегов:
<?php $args = array( // чтобы найти публикации по одному тегу: 'tag_id' => '14' // ID одного тега // чтобы найти публикации по нескольким ID тегов: // 'tag_id' => '14, 17, 18' // перечислены все желаемые тэги (их ID) для выборки // если нужно исключить теги: // 'tag_id' => '14, -17, 18' // здесь тег с ID 17 исключен из выборки ); ?>
Параметры tag__in
аргументов запроса по тегу
Этот параметр позволяет находить публикации с одним или несколькими массивами тегов:
<?php $args = array( // чтобы найти публикации по массиву ID тегов: 'tag_in' => array( '14', '15', '19' ) ); ?>
Параметры tag__not_in
аргументов запроса по тегу
Параметр tag__not_in
позволяет извлекать из базы данных публикации, не имеющие заданного тега или массива тегов:
<?php $args = array( // нужно использовать массив, даже если здесь только один тег 'tag__not_in' => array( '18' ) // ID тега для исключения // чтобы получить публикации, не принадлежащие нескольким тэгам: // 'tag__not_in' => array( '14', '17', '25' ) // массив идентификаторов тегов ); ?>
Параметры tag_slug__and
и tag_slug__in
аргументов запроса по тегу
Эти два параметра ведут себя точно так же, как и параметры tag__and
и tag__in
, за исключением того, что здесь используется слаг тега вместо его идентификатора:
<?php $args = array( // чтобы найти публикации по любому слагу из массива тегов: 'tag_slug__in' => array( 'moy-tag', 'second-tag', 'drugoy-tag' ) // чтобы найти публикации, имеющие все перечисленные слаги тегов: // 'tag_slug__and' => array( 'moy-tag', 'second-tag', 'drugoy-tag' ) // перечислены все желаемые теги (их слаги) ); ?>
Вот и все, тема сегодняшнего урока исчерпана. В данном уроке мы рассмотрели использование параметров для категорий и тегов в аргументах запроса WP_Query
. Следующий практический урок серии будет посвящен рассмотрению параметров таксономий аргументов запроса в ВордПрессе.