Підступна війна росії проти України. Орієнтовні втрати ворога
(станом на 03.02.2025)
841660
осіб
369
літаків
331
гелікоптерів
9920
танків
20685
ББМ
22589
артилерія
1053
ППО
1268
РСЗВ
35798
машин
28
кораблі і катери
Використання запитів WP_Query у WordPress в теорії та на прикладах — частина 1 (вступ)
Опубліковано

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

 

 

Клас WP_Query — це потужний інструмент, з допомогою якого можна максимально контролювати надсилання запитів до бази даних у сайтах на CMS WordPress. Він є одним із найпотужніших API, яким володіє цей популярний двигун.

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

 

Початок освоєння запитів WP_Query у ВордПрес

З допомогою запиту WP_Query ми можемо вибирати потрібні нам публікації (статті, пости, сторінки тощо) по визначеним нами же критеріям (параметрам) з використовуваної двигуном WordPress бази даних. Тож цей API є надпотужним інструментом для розробника сайтів на CMS WordPress.

За замовчуванням WordPress «у фоновому режимі» вже виконує такі запити на кожній поточній сторінці, — з урахуванням використовуваного типу публікації та/або її ієрархії. До прикладу, якщо переглядається статична сторінка (тип page), WordPress запускає запит для відображення сторінки з відповідним ID (ідентифікатором), а якщо переглядається архівна сторінка (категорія, теги, по даті, тощо) результатом запиту будуть всі публікації даного типу архівів.

Але якщо мені, як програмісту, не потрібен дефолтний запит, а потрібно щось більш унікальне? Наприклад, щоб вибрати з бази даних 5 останніх записів певної категорії? Коротка відповідь — це не проблема з використанням класу WP_Query та його величезною кількістю параметрів! З його допомогою ви можете показувати саме той контент, який вам потрібен!

Тож, давайте приступимо до вивчення цієї складної теми та поглянемо на всі тонкощі використання WP_Query.

 

Що таке WP_Query?

WP_Query — це клас, вбудований у двигун WordPress. А це означає, що вам не потрібно писати свій клас, адже у вас вже є швидкий доступ до всіх готових змінних, умовних перевірок та функцій/методів. Що є дуже зручним та надійним моментом при кодуванні сайту.

Клас WP_Query складається з чотирьох основних компонентів:

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

 

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

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

 

ВАЖЛИВО: відновлення (скидання) даних публікації після запиту

В кінці наведеного вище прикладу ви можете бачити рядок wp_reset_postdata(); — це дуже важливо, оскільки запит повинен повертатися до свого початкового стану (основного запиту, що виконується на цій сторінці). Ця умова виникає внаслідок того, що на одній сторінці може бути безліч запитів, — і тому вони можуть конфліктувати, а ви отримаєте зовсім не ті результати, на які очікували.

 

Навіщо використовувати WP_Query, якщо є інші методи?

Якщо ви раніше не користувалися класом WP_Query, можливо, вас потрібно буде переконувати в доцільності його використання? Оскільки є інші методи, навіщо використовувати саме цей вид запиту? Давайте розберемося у цьому питанні.

Щоб створити власний запит до бази даних, у вашому розпорядженні є не лише WP_Query, адже це не єдиний метод і є ще чотири:

  1. pre_get_posts — дуже ефективний хук, якщо вам потрібно змінити (модифікувати) основний запит. Повинен бути на самому початку вашого запиту. Не можна використати для створення абсолютно нового запиту.
  2. get_posts() — цей тег у шаблонах фактично використовує клас WP_Query, але є проміжною додатковою ланкою, щоб робити запит постів.
  3. get_pages() — також, як і попередній тег, додатково викликає клас WP_Query для запиту сторінок замість того, щоб робити це напряму.
  4. query_posts() — змінює основний запит, відкидаючи його і починаючи запит з початку (що може негативно впливати на час завантаження сторінки). При необхідності в зміні основного запиту, краще використовувати замість нього pre_get_posts. А якщо є потреба в повністю новому запиті, — тоді найкраще використовувати безпосередньо WP_Query.

Отже, як ви можете бачити, всі розглянуті методи є тим чи іншим видом використання класу WP_Query, тож чому б не робити це напряму, без допоміжних ланок?

 

Нижче ви можете графічно представити собі роботу класу WP_Query щодо запиту до бази даних. Дана інфографіка навіяна працею Андрія «Rarst» Савченка.

Схематична робота функцій запитів до бази даних у CMS WordPress:

схематична робота функцій запитів до бази даних у CMS WordPress

 

Коли використовувати WP_Query?

Перелічити всі варіанти використання WP_Query неможливо, але до основних способів можна віднести наступне:

  • для більш налаштовуваного переліку останніх дописів в сайдбарі (чи футері), на відміну від тематичного віджету «Останні публікації»
  • якщо вам потрібно навести список пов’язаних публікацій під поточною публікацією (наприклад, з тієї самої категорії)
  • якщо вам потрібно використовувати більше ніж один запит на сторінці (наприклад, окремі списки постів вгорі та внизу сайту, в сайдбарі, тощо)
  • якщо вам потрібно створити спеціальні запити з використанням кількох таксономій (категорії, теги, меню, тощо)
  • якщо дефолтний запит вас не задовольняє (наприклад, якщо вам потрібні специфічні типи публікацій, як от вкладення — attachment, тощо)

 

Потенційні підводні камені, деякі застереження, про що слід знати

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

  • Якщо вам потрібно лише змінити візуальну складову відображення публікацій певного типу, не використовуйте WP_Query. Натомість краще створити окремий файл шаблону для цього типу контенту (архіву) та використовувати змінений цикл у цьому файлі шаблону.
  • Якщо вам потрібно лише трохи модифікувати запит (наприклад, показувати іншу кількість дописів на архівній сторінці, чи не показувати певну категорію), не використовуйте для цього WP_Query, щоб створити абсолютно новий запит. Краще скористатися функціоналом хуку pre_get_posts для зміни основного запиту, в поєднанні з умовними тегами, щоб точно визначити місце застосування.
  • Хоча ви можете створити на сторінці з десяток різних запитів, краще такого уникати. Адже це негативно відобразиться на сервері та підключенні до бази даних. При необхідності в більше ніж п’яти запитах на сторінці, можливо кращим варіантом буде створення додаткових окремих сторінок для цього.

 

 

Замість короткого висновку

Клас WP_Query — це потужний і надзвичайно корисний інструмент, що вбудований у двигун ВордПрес. Отже, вам не потрібно видумувати свій код, щоб мати швидкий доступ до всіх готових змінних, умовних перевірок та функцій/методів при запиті контенту з бази даних. Що є дуже зручним та надійним моментом при кодуванні сайту, особливо для створення користувацьких запитів і забезпечення того, щоб сайт працював саме так, як ви того хочете.

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

 

 

Напишіть тут свою думку/питання

Ваша пошта не публікуватиметься. Обов’язкові поля позначені *


Швидкий доступ по сайту SebWeo
Пригости мене кавою