Аргументы 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 может опросить не все указанные вами аргументы, и в итоге на экран ничего не выведется.

Параметры для автора

При осуществлении запросов по авторам можно использовать четыре параметра:

  • author (int): используем ID автора;
  • author_name (string): используем ник автора ‘user_nicename’;
  • author__in (array): используем ID автора;
  • author__not_in (array): ID автора для исключения из запроса.

Параметр, author, позволяет запрашивать посты одного или нескольких авторов, указывая в запросе их ID:

$args = array(
    'author' => '2'
);

Приведенный выше код осуществляет запрос всех записей автора с ID 2.

Можно получить записи нескольких авторов:

$args = array(
    'author' => '1, 2'
);

Если нужно произвести запрос по имени, то можно использовать параметр author_name:

$args = array(
    'author_name' => 'rachelmccollin'
);

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

WP_Querry-arguments-authorname-user-screen

Пользователи могут редактировать это поле, поэтому более безопасно будет использовать параметр author.

Также можно запрашивать записи при помощи массива, состоящего из нескольких авторов:

$args = array(
    'author__in' => array(
        '1',
        '2'
    )
);

Приведенный выше код осуществляет запрос записей двух авторов с ID 1 и 2. Мы получим тот же результат, что и при использовании параметра author.

Можно исключить из поиска записи одного и более авторов, используя параметр author__not_in. Приведенный ниже код запрашивает все записи, за исключением записей автора с ID 1:

$args = array(
    'author__not_in' => array( '1' )
);

Также можно исключить записи сразу нескольких авторов:

$args = array(
    'author__not_in' => array(
        '1',
        '2'
    )
);

Также можно использовать параметр author с указанием знака минуса “ – “ перед ID автора, которого нужно исключить из поиска:

$args = array(
    'author' => '-2'
);

Параметр для поиска

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

$args = array(
    's' => 'моя любимая еда'
);

Это помогает при поиске похожих записей с такими же ключевыми словами.

Параметры для пароля

Для работы с паролем можно использовать два параметра типа password:

  • has_password (bool);
  • post_password (string).

Параметр, has_password, позволяет осуществлять запрос защищенных и не защищенных паролем записей. Чтобы запросить записи, защищенные паролем, нужно использовать следующий код:

$args = array(
    'has_password' => true
);

А для получения записей без пароля:

$args = array(
    'has_password' => false
);

Также можете запрашивать записи по самому паролю при помощи параметра post_password:

$args = array(
    'post_password' => 'ваш-пароль'
);

Параметры для прав доступа

Для работы с правами доступа существует всего один параметр, perm, который можно использовать для запроса записей пользователями, имеющими на это соответствующий доступ. Параметр принимает значение ‘readable’, и был создан специально для комбинирования с другими аргументами.

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

$args = array(
    'has_password' => true,
    'perm' => 'readable'
);

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

$args = array(
    'post_status' => 'draft',
    'perm' => 'readable'
);

Параметры для кэширования

Существует три параметра для кэширования, которые предотвращают попадание данных, полученных с помощью запроса, в кэш браузера:

  • cache_results (boolean): включение кэша информации из записи;
  • update_post_meta_cache (boolean): включение кэша метаданных записи;
  • update_post_term_cache (boolean): включение кэша терминов и таксономий записи.

По умолчанию все три параметры выставлены на true. Чтобы показать все записи типа product, но не добавлять информацию из записей в кэш, можно использовать следующий код:

$args = array(
    'post_type' => 'product',
    'cache_results' => false
);

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

$args = array(
    'post_type' => 'product',
    'update_post_meta_cache' => false,
    'update_post_term_cache' => false
);

Параметр для возврата полей

Можно использовать параметр fields, чтобы определить, какие поля нужно вернуть по запросу. Это поможет уберечь полученные из полей данные, и не выводить их в цикл.

По умолчанию запрос возвращает все поля, но есть два способа препятствовать этому. Первый заключается в использовании аргумента ‘ids’:

$args = array(
    'fields' => 'ids'
);

Он вернет массив из ID записей, и не затронет других полей. Если нужно вывести что-либо в цикл (например, заголовок записи), то можно воспользоваться функцией get_the_title ($post->ID).

Второй аргумент позволяет извлекать ассоциативный массив с ID записей, а также с ID дочерних записей:

$args = array(
    'fields' => 'id=>parent'
);

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

В завершение

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

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

Перевод статьи “WP_Query Arguments: Author, Search, Password, Permissions, Caching and Return Fields” был подготовлен дружной командой проекта Сайтостроение от А до Я.