Радий вітати вас в третій частині нашої масштабної серії статей, присвяченій 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» був підготовлений дружною командою проекту Сайтостроение від А до Я.