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

Задіємо всю міць WP_Query за допомогою функцій, дій і фільтрів

WP_Query – один з кращих прикладів схеми MVC (Model-view-controller або «модель-представлення-контролер). Він багатофункціональний, розширюємо, і дуже простий у використанні.

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

Функції властиві WP_Query

У WordPress є 13 функцій, які дозволяють повноцінно працювати з класом WP_Query.

Отримання змінних запитів: get_query_var()

Витягує з об’єкта $ WP_Query значення змінної запиту. У функції є два параметри: перший – це змінна, яка повертає значення, а другий – значення за замовчуванням, яке повертається при невстановленій змінної:

Зміна основного циклу: query_posts()

query_posts() – ця функція змінює основний запит і запускає новий. Після кожного її використання вам потрібно буде запускати wp_reset_query():

Цю функцію ядра WordPress часто використовують неналежним чином. Не слід використовувати її для створення вторинних запитів, замість цього можна використовувати клас WP_Query або функцію get_posts() для зміни основного запиту.

Для цього краще використовувати функцію pre_get_posts, яку ми обговоримо трохи пізніше. Навіть кодекс WordPress не рекомендує використовувати цю функцію.

Отримання окремої запису: get_post()

get_post() – це функція, з допомогою якої ви можете отримати будь-яку окрему запис. Вона приймає три необов’язкові параметри:

  • post ID (за замовчуванням ID поточного запису);
  • тип результату, який ви можете отримати: OBJECT, ARRAY_A (асоціативний масив) або ARRAY_N (числовий масив);
  • спосіб фільтрації результатів. Стандартне значення ‘raw‘, тобто результати не будуть фільтруватися до тих пір, поки ви не застосуєте значення ‘edit‘, ‘display‘, ‘attribute‘ або ‘js‘:

Зберігаємо запити в масиви: get_posts()

Функція get_posts() дозволяє виконати запити і зберегти їх як масиви. Тут потрібно використовувати ті ж аргументи, які ви використовуєте в WP_Query. Це один з кращих і ефективних способів створення списку записів:

‘news’,
‘order’ => ‘ASC’,
‘orderby’ => ‘post_title’,
‘posts_per_page’ => -1
);
// Повертаємо масив з усіма записами з рубрики «News».
$all_posts_list = get_posts( $args );
?>

Цю функцію можна використовувати для запуску «вторинних запитів», кодекс WordPress рекомендує при створенні множинних циклів використовувати WP_Query і get_posts() для отримання списку записів. Основна відмінність полягає в тому, що WP_Query робить більше запитів до бази даних (дані записи, мета-дані, дані про автора, а також коментарі), а get_posts() запитує лише дані записи (post data).

Отримуємо сторінки: get_pages()

Ця функція отримує список сторінок, і при цьому у неї є параметр post_type, який також дозволяє вибирати інші типи ієрархічних записів:

‘ASC’,
‘sort_column’ => ‘post_title’,
‘hierarchical’ => 1,
‘exclude’ => «,
‘include’ => «,
‘meta_key’ => «,
‘meta_value’ => «,
‘authors’ => «,
‘child_of’ => 0,
‘parent’ => -1,
‘exclude_tree’ => «,
‘number’ => «,
‘offset’ => 0,
‘post_type’ => ‘page’,
‘post_status’ => ‘publish’
);
$pages = get_pages( $args );
?>

Функція приймає аргументи, схожі на аргументи WP_Query:

  • sort_order: сортувати сторінки в зростаючому (asc) або зменшення (desc) порядку;
  • sort_column: як сортувати сторінки. Припустимі значення: post_title, menu_order, post_date, post_modified, ID, post_author, і post_name;
  • hierarchical: включена ієрархія сторінок (1) або ні (0);
  • exclude: перелік через кому або вказівку масиву ID сторінок, які слід виключити з виведення;
  • include: перелік через кому або вказівку масиву ID сторінок, які потрібно вивести, не показуючи все інше;
  • meta_key: при використанні з аргументом meta_value, виводяться сторінки тільки з певним мета-ключем і значенням;
  • meta_value: при використанні з аргументом meta_key, виводяться сторінки тільки з певним мета-ключем і значенням;
  • authors: список ID авторів через кому;
  • child_of: ID сторінки, дочірні сторінки якої будуть виведені в списку;
  • parent: список сторінок з зазначеним батьківським ID. Щоб цей аргумент вступив в силу, значення hierarchical повинно бути виставлено на 0;
  • exclude_tree: перелік через кому або масив ID сторінок, які потрібно виключити разом з їх сторінками;
  • number: кількість сторінок, яке буде виведено;
  • offset: кількість сторінок, які будуть пропущені на початку списку;
  • post_type: тип записів для запиту. За замовчуванням використовується тип простих сторінок page;
  • post_status: список типів статусу записів через кому, які будуть включені у видачу.

Перевіряємо, чи видає запит запису: have_posts()

Не приймаючи ніяких параметрів, ця функція повертає значення true при наявності записів, і false при їх відсутності:

Працюємо з циклами: the_post()

У кодексі зазначено, що ця функція створює ітерацію індексу запису в циклі». Вона робить наступне:

  • Витягує наступний запис з запиту;
  • Встановлює дані $post;
  • Встановлює параметр in_the_loop в значення true:

Параметри змінної $post: setup_postdata()

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

setup_postdata() заповнює глобальні змінні id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages. Вони потрібні для коректної роботи тегів шаблонів в контексті поточного запису. Вона не задає глобальну змінну $post, а приймає її:

Очищаємо поточний цикл: rewind_posts()

Ця функція «перемотує» цикл в його початок:

Скидаємо $post: wp_reset_postdata()

Ця функція скидає глобальну змінну $post до першого запису в основному запиті. Краще використовувати її після вторинного запиту:

Скидаємо запит: wp_reset_query()

Цю функцію можна використовувати, якщо основний запит був змінений за допомогою функції query_posts() або дії pre_get_posts. Вона допоможе скинути запит, і повернути його в початковий стан:

Перевіряємо, чи є поточний запит основним: is_main_query()

Це умовний тег, який повертає значення true, якщо поточний запит є основним, або false, якщо він таким не є:

Перевіряємо, чи знаходимося ми всередині циклу: in_the_loop()

Ще один умовний тег, який повертає значення true, якщо ваш код працює всередині циклу:

Завершення третьої частини

Тепер ви знайомі з усіма функціями, пов’язаними з WP_Query. Не пропускайте наступні статті з серії, присвяченій вивченню цього класу.

Якщо вам є що додати, обов’язково напишіть про це у своїх коментарях!

Переклад статті «Mastering WP_Query: Related Functions» був підготовлений дружною командою проекту Сайтостроение від А до Я.