SebWeo
Цей урок є продовженням серії про роботу з запитами до бази даних WP_Query у ВордПрес. В ньому ми зосередимось на пов’язаних з запитом функціях, а згодом перейдемо і до хуків (дій, actions) та фільтрів. Це дасть вам змогу використовувати запити максимально потужно, і при потребі розширювати дефолтний функціонал.
Окрім властивостей, методів і параметрів (які ми будемо розглядати трохи згодом), при роботі з класом WP_Query ми можемо також задіювати спеціальні функції, а також додаткові хуки та фільтри. І сьогоднішній практичний урок присвячено саме цим функціям. А в подальших уроках розберемо дії та фільтри, що пов’язані з WP_Query.
Давайте детальніше розглянемо функції WordPress, що спеціально «налаштовані» під клас WP_Query. В першій частині серії ми вже дотично познайомилися з деякими з них (query_posts(), get_posts(), get_pages()), а сьогодні продовжимо і розглянемо інші важливі функції (а також умовні теги) класу.
get_query_var()Ця функція має описову назву, що промовляє сама за себе: вона бере глобальний об’єкт $wp_query і отримує з нього загальнодоступну змінну запиту. Вона має два параметри: перший — це змінна, що повертає значення, а другий — значення за замовчуванням (якщо змінна не встановлена):
<?php $page_number = get_query_var( 'paged', 1 ); $category_name = get_query_var( 'category_name' ); $taxonomy_name = get_query_var( 'taxonomy' ); ?>
get_post()Якщо розглянута раніше функція get_posts() дозволяє виконувати запит та зберігати його у вигляді масиву, то споріднена функція get_post() дозволяє отримати лише одну публікацію. Ця функція має три додаткові параметри:
object), ARRAY_A (асоціативний масив) або ж ARRAY_N (числовий масив)<?php $single_post = get_post( 1, ARRAY_A ); $post_title = $single_post['post_title']; $post_date = $single_post['post_date']; ?>
Тут потрібно дещо уточнити. Якщо ви не знаєте, що саме використовувати для отримання масиву публікацій, WP_Query чи get_posts(), то у Codex’і є наступна рекомендація: якщо вам потрібен комплексний запит (що поверне дані публікації, її метадані, дані автора та пов’язані коментарі), — тоді вам потрібен клас WP_Query, а якщо вам потрібні лише основні дані публікації — тоді використовуйте функцію get_posts(). І, відповідно, при потребі у одній публікації, — тоді вам функція get_post() в допомогу. Раніше ще була функція для отримання даних однієї сторінки, але вона вже застаріла, і натомість потрібно використовувати саме get_page()get_post().
have_posts()Ця функція просто повертає TRUE (істина), якщо у результаті запиту є хоча б одна публікація, інакше FALSE (хиба). Не приймає жодних параметрів. Приклад використання:
<?php
if ( have_posts() ) {
// TRUE
} else {
// FALSE
}
?>
the_post()Кодекс позначає цю функцію як таку, що «ітерує індекс публікації в циклі». Але вона робить кілька інших речей:
$postin_the_loop<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
// ...
}
}
?>
$post: setup_postdata()Ця функція встановлює глобальні дані публікації, заповнює глобальні змінні $id, $authordata, $currentday, $currentmonth, $page, $pages, $multipage, $more, $numpages:
<?php global $post; setup_postdata( $post ); ?>
wp_reset_query()Використовуйте цю функцію, якщо ви змінювали основний запит (з допомогою функції query_posts() або хуку pre_get_posts). Приклад використання:
<?php // після того, як основний запит було змінено wp_reset_query(); ?>
$post: wp_reset_postdata()Дана функція повертає дані глобальної змінної $post до першої публікації в основному запиті. Краще застосовувати її, якщо ви використовуєте подальші після основного запити. Приклад використання:
<?php // після подальшого(ших) запитів wp_reset_postdata(); ?>
rewind_posts()Функціональність цієї функції полягає в тому, що вона просто «перемотує» (rewinds) цикл, щоб ви могли запустити його знову пізніше. Наприклад, так:
<?php // після циклу rewind_posts(); ?>
is_main_query()Цей умовний тег повертає TRUE (істина), якщо поточний запит є основним (головним), і FALSE (хиба) в іншому випадку:
<?php
if ( is_main_query() ) {
// основний запит
} else {
// другорядний(ні) запити
}
?>
in_the_loop()Подібним до попереднього тегу є умовний тег in_the_loop(), що повертає TRUE (істина), якщо ваш код виконується всередині циклу, або FALSE (хиба) в іншому випадку:
<?php
if ( in_the_loop() ) {
// наш код виконується в циклі
} else {
// наш код виконується поза циклом
}
?>
Ось і все, тема сьогоднішнього уроку вичерпана. Ви познайомились з функціями, що безпосередньо пов’язані з класом WP_Query! А далі мова піде про хуки та фільтри.
20 травня 2026 року офіційно відбувся реліз довгоочікуваної мажорної версії WordPress 7.0 «Armstrong», названої на…
Кожен власник сайту та SEO-спеціаліст веде щоденну запеклу боротьбу за утримання користувача на сторінках вебресурсу.…
Футбольна секція швидко показує, наскільки взуття підходить дитині. Якщо пара ковзає, тисне або погано чіпляється…
Компанія Samsung - один із лідерів на ринку електроніки. Її смартфони вирізняються надійністю, якісними дисплеями,…
Іспанська мова приваблює мільйони людей своєю мелодійністю, емоційністю та відносною простотою вивчення. Одним із найважливіших…
Робочий простір давно перестав бути просто столом із ПК/ноутбуком. Сьогодні це повноцінна екосистема, де кожна…