Хей, имам нещо специално за теб!
Попълни имейл адрес, на който до минута ще получиш обещаното ;)
WordPress има стотици вградени функции, даващи ни възможността да правим заявки за публикации по много и различни начини. Основен отговорник за това е класът WP_Query
, който дава достъп практически до всичко – от заглавия и съдържание на публикация, до информация за автора и датата на публикуване.
Заедно с The Loop, WP_Query
се превръща в най-добрият приятел на всеки WP developer, благодарение на множеството си аргументи и параметри, които дават достъп за персонализирана заявка към базата данни.
Благодарение на класът 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“.
Както ти споменах по-горе, заедно с The Loop, WP_Query ти предоставя огромен набор от възможности за визуализиране на публикации на сайта ти.
За да започнеш с първото си query към базата данни, е необходимо да си поне малко запознат с принципа на работа на The Loop.
Базиран на подадените параметри в WP_Query
, ето какво може да екстрактнеш с помощта на The Loop:
А ето и накратко как изглежда The Loop в WordPress:
// The Loop
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content here
endwhile;
endif;
С примерът по-горе ще достъпим ВСИЧКИ публикации. Но какво се случва, ако искаш да „извикаш“ само най-популярните (с най-много коментари), или пък от определена категория, или пък от определен автор? Тук идва силата на WP_Query
и по-конкретно – на аргументите (познати още като WP_Query args
).
// 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'
);
Както ти споменах по-рано, добавянето на параметри е важна част от персонализирането на 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, но вземайки предвид всички параметри, може да си поиграеш и да видиш по какъв начин би могъл да оптимизираш заявката си.
Най-често посетителите на даден уеб сайт се интересуват от последните публикации в него. Често срещан подход е под дадена публикация да се появяват свързани с нея (по категория) нови статии.
// 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 🙂