За минулий рік багато статей було присвячено поліпшень і нововведень в WordPress. Сьогодні я хочу розповісти вам про один з найцікавіших змін для розробників: вдосконалення конкретних типів запитів.

Головні зміни:

  • Запровадження підтримки вкладених запитів для запитів до метаданих запису, дат і термінів таксономії;
  • Додаткові параметри запитів до коментарям;
  • Кілька виправлених багів.

Вкладені запити

У попередніх версіях WordPress в запитах до термінів таксономій, дат і метаданих можна було використовувати вираз AND або OR. Приміром, на кулінарному сайті такі аргументи можна було використовувати в запиті для отримання рецептів швидкого сніданку:

‘post’,
‘tax_query’ => array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘speed’,
‘field’ => ‘slug’,
‘terms’ => array( ‘quick’ )
),
array(
‘taxonomy’ => ‘meal’,
‘field’ => ‘slug’,
‘terms’ => array( ‘breakfast’ )
)
)
);
$query = new WP_Query( $args );
?>

Такий запит здійснює пошук по таксономиям ‘speed‘ і ‘meal‘, і видає запису з відповідними термінами ‘quick‘ і ‘breakfast‘. Але що якщо нам потрібно створити більш комплексний запит? Припустимо, вам потрібен рецепт швидкого сніданку, а також рецепти традиційних полдников.

У такій ситуації ви не можете використовувати вираз AND, так як в результаті отримаєте швидкі і традиційні рецепти, як для обіду, так і для сніданку, а нам це не підходить. І також не можна використовувати вираз OR, яке пов’язує всі потрібні терміни.

Тепер у нас з’явилася можливість виконувати подібні комплексні запити. Щоб отримати рецепти швидкого сніданку і традиційні обідні рецепти, потрібно буде використати наступний код:

array(
‘relation’ => ‘OR’,
array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘meal’,
‘field’ => ‘slug’,
‘terms’ => array( ‘breakfast’ )
),
array(
‘taxonomy’ => ‘speed’,
‘field’ => ‘slug’,
‘terms’ => array( ‘quick’ )
)
),
array(
‘relation’ => ‘AND’,
array(
‘taxonomy’ => ‘meal’,
‘field’ => ‘slug’,
‘terms’ => array( ‘lunch’ )
),
array(
‘taxonomy’ => ‘speed’,
‘field’ => ‘slug’,
‘terms’ => array( ‘slow’ )
)
)
)
)
);
$query = new WP_Query( $args );
?>

Тут ми використовували два вкладених масиву:

  • Зовнішній масив використовує вираз OR, так як тут ми шукаємо рецепти швидких сніданків або традиційних полдников;
  • Перший вкладений масив шукає рецепти швидких сніданків за допомогою виразу AND, так як нам потрібно, щоб в записах присутні обидва терміна;
  • Другий вкладений масив шукає рецепти традиційних полдников за допомогою AND.

Звичайно, можна змінити ці запити, вказавши певні терміни класифікацій і значення.

Застосовуємо вкладені запити: терміни таксономій, метадані та дати

У наведеному вище прикладі використовуються терміни таксономій, але такі ж можливості були реалізовані і для запитів, направлених до дат і метаданих.

Синтаксис працює однаково в запитах і до дат, і до метаданих. В мета-запитах ви замінюєте tax_query на meta_query і використовуєте ‘key’ і ‘value’ в якості значень. У запитах до дат ви замінюєте tax_query на date_query і використовуєте параметри дат, представлені в кодексі WordPress.

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

Щоб виконувати запити до коментарів, замість класу WP_Query слід використовувати WP_Comment_Query. Цей клас придбав 8 нових параметрів:

  • ‘author__in’: ідентифікує автора коментаря (або масив авторів);
  • ‘author__not_in’: виключити коментар автора за ID (або масиву авторів);
  • ‘post_author__in’: ідентифікує автора (або масив авторів) запису, який був залишений коментар;
  • ‘post_author__not_in’: виключає коментарі, залишені до записів конкретного автора або масиву авторів;
  • ‘comment__in’: коментарі з конкретним ID або масивом ID;
  • ‘comment__not_in’: виключає коментарі з конкретним ID або масивом ID;
  • ‘post__in’: дочірні коментарі, залишені до запису або масиву записів (використовується ID запису);
  • ‘post__not_in’: виключити дочірні коментарі, залишені до запису або масиву записів (використовується ID запису).

Тут в якості значень використовуються ID автора коментаря або запису.

Врахуйте, що клас WP_Comment_Query тепер також підтримує вкладені запити.

Виправлення

  • Виправлений баг, який викликав помилку запиту, якщо в ньому з date_query використовувалися tax_query або meta_query;
  • Виправлена помилка запиту ‘orderby’ => ‘meta_value’ при передачі в WP_Query ‘meta_query’ з виразом OR.

Більш докладно про всі зміни можна дізнатися на сайті WordPress.

На завершення

Можливість використовувати вкладені запити означає, що тепер ви можете отримувати контент більш зручними методами. Було б цікаво побачити приклади того, як ви будете використовувати ці запити!

Переклад статті «Query Improvements in the Latest Versions of WordPress» був підготовлений дружною командою проекту Сайтостроение від А до Я.