WP_Query: сърцето на WordPress
WordPress има стотици вградени функции, даващи ни възможността да правим заявки за публикации по много и различни начини. Основен отговорник за това е класът WP_Query, който дава достъп практически до всичко – от заглавия и съдържание на публикация, до информация за автора и датата на публикуване.
Заедно с The Loop, WP_Query се превръща в най-добрият приятел на всеки WP developer, благодарение на множеството си аргументи и параметри, които дават достъп за персонализирана заявка към базата данни.
Какво представлява WP_Query?
Благодарение на класът WP_Query можеш да правиш разнообразни и персонализирани спрямо страница заявки към mySQL базата данни, в която се съхраняват всички публикации (а също и страници, коментари, потребители, конфигурационни настройки) на сайта ти.
Като WordPress developer (не харесвам думата разработчик) можеш да прецизираш в детайл заявките, които изпращаш към базата именно с помощта на този PHP клас (и вграден по подразбиране за WP).
А ето и как изглежда кодът на едно примерно query:
// WP_Query
$query = new WP_Query ([
'post_type' => 'post',
'posts_per_page' => 25,
'category_name' => 'health',
]);
В горе посоченият пример казваме, че искаме всички публикации от тип „пост“ (тъй като можем да повикаме страница, custom post type и пр.), да са по 25 на страница и да са от категория „health“.
Как да използваш WP_Query?
Стъпка 1: The Loop
Както ти споменах по-горе, заедно с The Loop, WP_Query ти предоставя огромен набор от възможности за визуализиране на публикации на сайта ти.
За да започнеш с първото си query към базата данни, е необходимо да си поне малко запознат с принципа на работа на The Loop.
Базиран на подадените параметри в WP_Query, ето какво може да екстрактнеш с помощта на The Loop:
- съдържание от custom post types и custom fields
- заглавие
- кратък текст (excerpt)
- автор
- категория/категории
- дата на публикуване
- и още
А ето и накратко как изглежда The Loop в WordPress:
// The Loop
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content here
endwhile;
endif;С примерът по-горе ще достъпим ВСИЧКИ публикации. Но какво се случва, ако искаш да „извикаш“ само най-популярните (с най-много коментари), или пък от определена категория, или пък от определен автор? Тук идва силата на WP_Query и по-конкретно – на аргументите (познати още като WP_Query args).
Стъпка 2: The Arguments
// Instantiate WP_Query instance
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<h2>' . get_the_title() . '</h2>';
}
} else {
// No posts found
echo '<p> No posts found. </p>'
}
// Restore original Post Data
wp_reset_postdata();Аргументите на WP_Query информират WordPress каква информация искаш да извлечеш от базата данни. Вместо да показваш всички публикации (както в примера по-горе), аргументите ще поставят някои условия в The Loop.
Ако си забелязал, в горния откъс код имаме $args като параметър на $the_query. Тъкмо това е мястото, на което да посочиш своите аргументи.
А за да се осъществи това, е необходимо да подадеш определени параметри в масив, например:
$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);Стъпка 3: The Parameters
Както ти споменах по-рано, добавянето на параметри е важна част от персонализирането на WP_Query. Посредством тях можеш да накараш WordPress да „извиква“ колекция от определени публикации от базата данни.
И както повечето неща в WordPress, и тук имаме готови параметри, които можеш да включиш в аргументите си.
Ето и най-популярните:
posts_per_page– указва броят на публиакции, които искаш да покажеш на страницата сиauthor– извлича публикации от един (или повече) конкретен авторcat– указва от коя категория (категории) трябва да бъдат публикациитеtag– извлича публикации, които имат указания тагorderby– сортира резултатите по автор, тип на публикация, дата и др.order– сортира резултатите във възходящ или низходящ редpost_type– определя дали конкретнотоWP_Queryтрябва да извлича публиакции, страници или custom post typespost_status– указва с какъв статус да бъдат публиакциите в товаWP_Query– in-progress, scheduled, published или deleted
Примери за WP_Query
Ще ти покажа няколко често срещани примера за персонализирано WP_Query, но вземайки предвид всички параметри, може да си поиграеш и да видиш по какъв начин би могъл да оптимизираш заявката си.
➡️ Свързани последни публикации от определена категория:
Най-често посетителите на даден уеб сайт се интересуват от последните публикации в него. Често срещан подход е под дадена публикация да се появяват свързани с нея (по категория) нови статии.
// Get the current post id
$current_post_id = get_the_ID();
// Get the current post's category (first one if there's more than one).
$current_post_cats = get_the_category();
$current_post_first_cat_id = $current_post_cats[ 0 ]->term_id;
// Setup arguments
$args = array(
// Get category's posts
'cat' => $current_post_first_cat_id,
// Exclude current post
'post__not_in' => array( $current_post_id )
);
// Instantiate WP_Query instance
$my_query = new WP_Query( $args );В примерът по-горе вземаме ID-то на публикацията, в която се намираме, след което и неговата категория (или категории). След това създаваме масив с аргументи, в които казваме, че желаем категорията на публиакциите, които ще показваме, да е като тази на настоящия пост. Едновременно с това изключваме самия пост, в който се намираме, от свързаните постове. Накрая създаваме WP_Query с вече подадените параметри в аргументите.
➡️ Публикации, добавени тази седмица:
Ако имаш верни последователи, то те ще желаят да четат най-новите публикации, тъй като са минали през старите. Особено подходящо за новинарски сайт.
// Setting up the arguments
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
// Instantiate WP_Query instance
$posts = new WP_Query($arguments);Използвайки WP_Query, може да зададеш параметри, базирани на датата на публикуване на статията/поста. По този начин може да предотвратиш появата на по-стари публикации.
➡️ Популярни публикации (на база брой коментари):
Аналогично на извличането на публикации на база тяхната дата на публикуване, можеш да ги сортираш и по брой коментари. По този начин ще имаш най-популярните постове, които аудиторията ти би се ардвала да види първо.
// Setup arguments
$args = array(
// Order by comment count
'orderby' => 'comment_count'
);
// Instantiate WP_Query instance
$my_query = new WP_Query( $args );Освен това, можеш да показваш и най-популярните публикации в дадена категория:
// Setup arguments
$arguments = array(
"category_name" => "fiction",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
// Instantiate WP_Query instance
$posts = new WP_Query($arguments);В последният пример ще покажеш само 5 от най-популярните публикации в категория fiction. Разбира се, може да промяняш това число, както и категорията.
➡️ Публикации от един автор, в същата категория:
С помощта на WP_Query можеш да показваш публикации от един и същи автор, в една и съща категория.
// Setup arguments
$arguments = array(
"author_name" => "author_name",
"category_name" => "fiction",
"posts_per_page" => 3,
);
// Instantiate WP_Query instance
$posts = new WP_Query($arguments);Заключение
С този кратък урок, посветен на WP_Query се надявам да си разбрал силата на този клас и всички негови аргументи и техните параметри. Персонализираното съдържание е все по-важно в съвременния уеб, а какъв по-лесен начин да „сервираш“ тъкмо това, което потребителя желае да види 🙂
Stay blond 🙂








