Використання запитів WP_Query у WordPress — частина 6 (аргументи для отримання постів, сторінок)

Сьогоднішній урок є практичним і слугує ціллю закріпити отримані теоретичні знання з попередніх уроків по запиту WP_Query у ВордПресі. Використовуючи аргументи ми створимо спеціальні запити, що дасть змогу отримати потрібні нам публікації, сторінки або публікації певних типів.

Перш ніж перейти до практики, давайте ще раз коротко пригадаємо, як працюють аргументи в WP_Query. Для побудування оптимального WP_Query запиту (чи то у темі, чи то у плагіні) ми повинні задіяти чотири основні елементи:

  1. аргументи для запиту (параметри яких є темою сьогоднішнього уроку)
  2. безпосередньо сам запит
  3. робота з циклом
  4. закриття циклу (умовних тегів if та while); скидання даних публікації (глобального $post)

 

На практиці це виглядатиме приблизно так:

<?php
$args = array(
  // масив аргументів запиту
);
// зразок користувацького запиту
// створення нового екземпляру класу — нового об’єкту
$query = new WP_Query( $args );
// перевірка на наявність результатів запиту
if ( $query->have_posts() ) {
  // проходження циклом по результатам запиту
  while ( $query->have_posts() ) {
    $query->the_post();
    // тут контент публікації результату
  }
}
// обов'язкове відновлення (скидання) оригінальних даних публікації після запиту
// перезавантаження глобальної змінної $post
wp_reset_postdata();
?>

 

У першому абзаці прикладу йде масив аргументів, що вказують WordPress, які дані нам потрібно отримати з бази даних. І в даному уроці ми розберемо це більш детально:

<?php
$args = array(
  // масив аргументів запиту
);
// ...
?>

 

Використання аргументів у запиті

Аргументи для запиту вказуються в масиві. Схематично їх зазначення може виглядати наступним чином:

<?php
$args = array(
  'parameter1' => 'value',
  'parameter2' => 'value',
  'parameter3' => 'value'
);
?>

Параметри та їхні значення беруться в одинарні (або подвійні) лапки, між ними вказується знак =>, а розділяються від інших комами. Якщо в цьому допустити помилку, тоді двигун WordPress може не правильно обробити ваш запит або, навіть, призвести до «білого екрану смерті».

 

Запит, що поверне окрему публікацію (типу пост)

Це найпростіший сценарій. Щоб «витягти» з бази даних одну певну публікацію, можна піти двома шляхами:

  1. Використати ідентифікатор публікації: p (int)
  2. Використати слаг (частину URL) посту: name (string) (! це не заголовок посту)

 

Ці два параметри ви можете використовувати для отримання будь-яких типів публікацій, включно з постами, сторінками, вкладеннями та спеціальними типами публікацій (CPTcustom post type). За замовчуванням WordPress надсилатиме запит на тип публікації post, але це вирішується додатковим аргументом, як ви побачите згодом.

Отже, щоб повернути конкретну публікацію, ви можете побудувати запит так:

<?php
$args = array(
  'p' => 125 // ID посту
);
?>

або ж так:

<?php
$args = array(
  'name' => 'vykoristannya-zapytiv-wp-query-u-wordpress'  // слаг посту
);
?>

Використання параметра name містить ризики, якщо хтось його змінить у майбутньому, тому використання ідентифікатора публікації безпечніше з огляду на те, що його не можна змінити.

 

Запит, що поверне окрему публікацію (типу сторінка)

Щоб отримати одну конкретну сторінку ви теж зможете використати 2 різні варіанти:

  1. Використати ідентифікатор сторінки: page_id (int)
  2. Використати слаг (частину URL) сторінки: pagename (string) (! це не заголовок сторінки)

Тож, щоб отримати лише одну конкретну сторінку з бази даних, використовуйте щось одне із цього:

<?php
$args = array(
  'page_id' => '25' // ID сторінки
  //  або ж так
  //  'pagename' => 'chastina-url-adresy-storinki' // слаг сторінки
);
?>

 

Запит, що поверне окрему публікацію (іншого типу)

Якщо вам потрібно отримати публікації іншого типу (не пост і не сторінка), включно з нестандартним типом публікації (CPT), тоді використовуйте параметр post_type. Наприклад, якщо вам потрібен один товар (публікація із типом product), тоді запит може виглядати так:

<?php
$args = array(
  'p' => '1907',
  'post_type' => 'product'
);
?>

або якщо вам потрібне вкладення (тип attachment — прикріплене зображення):

<?php
$args = array(
  'p' => '1155',
  'post_type' => 'attachment'
);
?>

 

Які типи публікацій можна вказувати у запиті

В деяких із попередніх прикладів я використовував параметр post_type, який вказується для ідентифікації публікацій певного типу. Давайте розглянемо основні типи публікацій у WordPress детальніше:

  • post: публікація з типом пост, допис, тощо. Це значення за замовчуванням!
  • page: публікація з типом сторінка
  • revision: публікація з типом редакція (ревізія, архівна копія, автозбереження посту, тощо)
  • attachment: публікація з типом вкладення (мініатюри постів)
  • nav_menu_item: окремий тип для пункту навігаційного меню
  • any: для публікацій з будь-яким типом (окрім ревізій і якщо типу встановлено для 'exclude_from_search' значення true)
  • CPT (Custom Post Types – cпеціальні типи публікацій (наприклад, product, або будь-який тип, створений вами функцією register_post_type())

 

Запит, що працює з дочірніми сторінками

Часто буває, що програмістам сайту на ВордПрес потрібно отримати всі сторінки, які є дочірніми для поточної сторінки (окрім публікацій із типом post — вони не є ієрархічними). Тоді варто скористатися чимось із цих трьох аргументів:

  • Використати ідентифікатор сторінки для повернення лише її дочірніх сторінок: post_parent (int). Встановлення значення 0 буде повертати лише записи верхнього рівня (всі батьківські публікації).
  • Використати масив «входження» ідентифікаторів публікацій: post_parent__in (array):
  • Використати «зворотній» масив ідентифікаторів публікацій: post_parent__not_in (array).

 

Давайте розглянемо кожен з цих варіантів на практиці:

<?php
$args = array(
  'post_type' => 'page', // обов’язково зазначати, якщо це не post
  'post_parent' => '18' // ID поточної сторінки
  // щоб знайти всі сторінки, які є дочірніми для даної сторінки (з ID 18)
);
?>

 

Щоб додати динаміки у запит, і автоматично отримувати ID поточної сторінки, а не записувати його «жорстко», ось як це можна оформити:

<?php
$current_page_id = get_the_ID(); // отримати ID поточної сторінки
$args = array(
  'post_type' => 'page',
  'post_parent' => $current_page_id // динамічно підставляти ID на поточній сторінці
);
?>

 

Запит, що працює з масивом публікацій

Для таких запитів можна використати один із двох аргументів (їх не можна використовувати одночасно):

  • Використання масиву ідентифікаторів публікацій (що входять до масиву): post__in (array)
  • Використання масиву ідентифікаторів публікацій (що НЕ входять до масиву): post__not_in (array)

 

Варіант першого використання:

<?php
$args = array(
  //  перелічуємо ID потрібних публікацій
  'post__in' => array(
    '177',
    '94',
    '58'
  ),
  'post_status' => 'any', // щоб включити публікації з усіма статусами
  'ignore_sticky_posts' => 'true' // щоб виключити "прикріплені" публікації, адже вони завжди входять до запиту
);
?>

 

Інший аргумент — post__not_in — працює подібним чином, але він виведе всі публікації, окрім перелічених у запиті. Інколи це справді буває корисним:

<?php
$args = array(
  'post_type' => 'product', // якщо нам потрібні товари, і окрім зазначених нижче
  // перелічуємо ID товарів для виключення
  'post__not_in' => array(
    '127',
    '391',
    '559'
  )
);
?>

 

На сьогодні все. В даному уроці ми розглянули використання WP_Query для створення спеціальних запитів отримання різноманітних публікацій. Ось які питання ми розглянули:

  • Аргументи для різних типів публікацій
  • Використання запиту для отримання сторінок верхнього рівня
  • Використання запиту для отримання публікацій певного типу
  • Використання запиту для отримання всіх публікацій, окрім вказаних
  • Використання запиту для отримання всіх дочірніх елементів поточної сторінки

Окрім цього існує ще багато інших аргументів запиту, які ми будемо розглядати в майбутніх уроках. А наступний практичний урок серії буде присвячено розгляду аргументів, які можна використовувати для запиту категорій і тегів у ВордПрес.

 

Recent Posts

Використання запитів WP_Query у WordPress — частина 7 (аргументи для отримання категорій, тегів)

Цей практичний урок буде присвячений розгляду аргументів, які можна використовувати для отримання публікацій певних категорій…

1 день ago

Використання запитів WP_Query у WordPress — частина 5 (методи та властивості)

Продовжуємо серію уроків по роботі з запитами до бази даних WP_Query у ВордПрес. Сьогоднішній урок…

5 днів ago

Використання запитів WP_Query у WordPress — частина 4 (хуки та фільтри)

Цим уроком ми продовжуємо серію уроків по роботі з запитами до бази даних WP_Query у…

6 днів ago

Проксі: основи, види та переваги використання

У сучасному цифровому світі питання безпеки, анонімності та швидкого доступу до інтернет-ресурсів стає дедалі актуальнішим.…

1 тиждень ago

Джекі Чан

Твоя жахлива робота — мрія кожного безробітного. Твоя неслухняна дитина — мрія кожного бездітного. Твій…

2 тижні ago

Використання запитів WP_Query у WordPress — частина 3 (основні функції класу)

Цей урок є продовженням серії про роботу з запитами до бази даних WP_Query у ВордПрес.…

2 тижні ago