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