Хей, имам нещо специално за теб!

5 грешки, които допускаш по време на интервю

Попълни имейл адрес, на който до минута ще получиш обещаното ;)

wp_query: сърцето на WordPress

WP_Query: сърцето на WordPress – [пълно ръководство]

Как да правиш персонализирани заявки към базата данни, да филтрираш публикации и да показваш ...

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 types
  • post_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 🙂

Ad - Managed WordPress Hosting from SiteGround - Powerful, yet simple to use. Click to learn more.

Остави коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *