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

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

В этом уроке мы рассмотрим два типа аргументов:

  • категории
  • метки

Аргументы для этих таксономий весьма схожи, но все же между ними есть различия, и о них нужно знать, если вы хотите применять их эффективно.

Как работают аргументы в классе 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 (число): использовать id категории.
  • category_name (строка): использовать слаг категории (НЕ имя).
  • category__and (массив): использовать id категории.
  • category__in (массив): использовать id категории.
  • category__not_in (массив): использовать id категории.

Обратите внимание, что ни один из данных параметров не использует имя категории. Даже параметр category_name в качестве значения принимает слаг категории, но не имя. В данном случае лучше использовать слаг, чем ID, поскольку при использовании этого же кода позже, вам будет проще идентифицировать именно слаги. Но, если существует вероятность, что ваши пользователи могут изменить слаг одной или нескольких категорий, тогда лучше использовать ID во избежание связанных с этим проблем.

Теперь мы рассмотрим каждый из этих параметров подробно.

Параметр cat

Это простой параметр: используйте ID конкретной категории или строку с несколькими идентификаторами.

Получение одной категории выглядит следующим образом:

$args = array(
    'cat' => '12'
);

А для того чтобы получить несколько категорий, используйте этот код:

$args = array(
    'cat' => '12, 13, 14'
);

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

Этот же параметр можно использовать для получения записей, относящихся только к одной из двух категорий. Для этого используйте знак минуса перед идентификатором категории:

$args = array(
    'cat' => '12, -13'
);

Мы видим, что здесь запрашиваются записи из категории 12, и исключаются записи из категории 13.

Параметр category_name

Параметр category_name использует слаг категории, а не ее имя (непривычно, я знаю!). Снова-таки здесь можно указывать слаг одной категории либо строку с несколькими категориями для поиска записей в любой из указанных категорий.

Для того чтобы получить записи из одной категории, добавьте следующий код:

$args = array(
    'category_name' => 'my-slug'
);

А для поиска записей из одной или из нескольких категорий, используйте этот код:

$args = array(
    ‘category_name’ => ‘my-slug, your-slug, another-slug’
);

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

Параметр 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

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

Для того чтобы исключить записи из одной категории, используйте следующий код:

$args = array(
    'category__not_in' => '12'
);

А для того чтобы исключить записи из массива категорий, воспользуйтесь этим фрагментом:

$args = array(
    'category__not_in' => array(
        '12',
        '13',
        '14'
    )
);

Параметры меток

Параметры меток отличаются от параметров категорий. Вот они:

  • tag (строка): указать слаг метки.
  • tag_id (число): указать id метки.
  • tag__and (массив): указать идентификаторы меток.
  • tag__in (массив): указать идентификаторы меток.
  • tag__not_in (массив): указать идентификаторы меток.
  • tag_slug__and (массив): указать слаги меток.
  • tag_slug__in (массив): указать слаги меток.

Рассмотрим каждый из них.

Параметр tag

Параметр tag принимает слаг метки в качестве ее значения и используется для получения записей с одной меткой или с любой из меток строки.

Для того чтобы найти запись с одной меткой, используйте следующий код:

$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'
);

Для поиска записей с одной или несколькими метками из строки идентификаторов меток, воспользуйтесь этим кодом:

$args = array(
    'tag_id' => '21, 22, 23'
);

Этот же параметр можно использовать для того, чтобы исключить метки.

Для того чтобы исключить из поиска записи с одной указанной меткой, добавьте такой код:

$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

Этот параметр позволяет искать записи, не имеющие указанную метку или массив меток.

Используйте этот код для того, чтобы исключить одну метку:

$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. Единственная разница заключается в том, что в массиве вы используете не идентификаторы меток, а их слаги.

Например, для того чтобы найти записи, имеющие хотя бы одну из указанных меток, используйте параметр tag_slug_in.

$args = array(
    'tag_slug__in' => array(
        'my-tag',
        'your-tag',
        'another-tag'
    )
);

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

Для того чтобы включить в поиск записи со всеми указанными метками, используйте параметр tag_slug_and.

$args = array(
    'tag_slug__and' => array(
        'my-tag',
        'your-tag',
        'another-tag'
    )
);

Здесь мы ищем записи не с любой из меток, а со всеми метками.

Заключение

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

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.