Сьогоднішній урок є практичним і слугує ціллю закріпити отримані теоретичні знання з попередніх уроків по запиту WP_Query у ВордПресі. Використовуючи аргументи ми створимо спеціальні запити, що дасть змогу отримати потрібні нам публікації, сторінки або публікації певних типів.
Перш ніж перейти до практики, давайте ще раз коротко пригадаємо, як працюють аргументи в WP_Query
. Для побудування оптимального WP_Query
запиту (чи то у темі, чи то у плагіні) ми повинні задіяти чотири основні елементи:
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 може не правильно обробити ваш запит або, навіть, призвести до «білого екрану смерті».
Це найпростіший сценарій. Щоб «витягти» з бази даних одну певну публікацію, можна піти двома шляхами:
p
(int)name
(string) (! це не заголовок посту)
Ці два параметри ви можете використовувати для отримання будь-яких типів публікацій, включно з постами, сторінками, вкладеннями та спеціальними типами публікацій (CPT — custom post type). За замовчуванням WordPress надсилатиме запит на тип публікації post
, але це вирішується додатковим аргументом, як ви побачите згодом.
Отже, щоб повернути конкретну публікацію, ви можете побудувати запит так:
<?php $args = array( 'p' => 125 // ID посту ); ?>
або ж так:
<?php $args = array( 'name' => 'vykoristannya-zapytiv-wp-query-u-wordpress' // слаг посту ); ?>
Використання параметра name
містить ризики, якщо хтось його змінить у майбутньому, тому використання ідентифікатора публікації безпечніше з огляду на те, що його не можна змінити.
Щоб отримати одну конкретну сторінку ви теж зможете використати 2 різні варіанти:
page_id
(int)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
)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
для створення спеціальних запитів отримання різноманітних публікацій. Ось які питання ми розглянули:
Окрім цього існує ще багато інших аргументів запиту, які ми будемо розглядати в майбутніх уроках. А наступний практичний урок серії буде присвячено розгляду аргументів, які можна використовувати для запиту категорій і тегів у ВордПрес.
Цей практичний урок буде присвячений розгляду аргументів, які можна використовувати для отримання публікацій певних категорій…
Продовжуємо серію уроків по роботі з запитами до бази даних WP_Query у ВордПрес. Сьогоднішній урок…
Цим уроком ми продовжуємо серію уроків по роботі з запитами до бази даних WP_Query у…
У сучасному цифровому світі питання безпеки, анонімності та швидкого доступу до інтернет-ресурсів стає дедалі актуальнішим.…
Цей урок є продовженням серії про роботу з запитами до бази даних WP_Query у ВордПрес.…