У заключній статті, присвяченій аргументів 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 може опитати не всі наведені вами аргументи, і в результаті на екран нічого не виведеться.

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

При здійсненні запитів по авторам можна використовувати чотири параметри:

  • 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, яке використовується в панелі адміністрування для виведення ників користувачів ресурсу:

Користувачі можуть редагувати це поле, тому більш безпечно використовувати параметр 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» був підготовлений дружною командою проекту Сайтостроение від А до Я.