Jak korzystać z klasy WP_Query w WordPress?

Opublikowany: 2024-08-09

Spis treści
Co to jest WP_Query?
Krótka notatka na temat WP_Query
Jak możesz wykorzystać WP_Query?
WP_Query kontra query_posts(): Który jest lepszy?
Kilka przykładów użycia WP_Query
Wniosek

Co to jest WP_Query?

WP_Query to potężna klasa PHP w WordPress, która umożliwia konstruowanie niestandardowych zapytań do zbioru danych w celu pobierania postów i innej treści oraz renderowania ich na stronie. Zapewnia elastyczny i skuteczny sposób interakcji z bazą danych i pobierania treści w oparciu o różne kryteria.


Krótka notatka na temat WP_Query

Być może wiesz, że WordPress przechowuje wszystkie dane Twojej witryny, takie jak posty, strony, komentarze lub ustawienia w bazie danych MySQL.

Zatem do każdej osoby odwiedzającej Twoją witrynę natychmiast wysyłane jest żądanie do tej bazy danych, w wyniku czego pobierane są żądane dane, niezależnie od tego, czy są to posty, czy strony do wyświetlenia na ekranie.

Ale musisz być zaskoczony, wiedząc, że za pomocą WP_Query możesz tworzyć zapytania, które pomogą Ci pobrać określone informacje z Twojej bazy danych. Dlatego zawsze, gdy ktoś szuka Twoich treści, WordPress korzysta z tej wbudowanej klasy.

Bez wątpienia nadal możesz używać języka SQL do pisania wszystkich tych zapytań, ale jest to dość trudne i nie najłatwiejsze. Z drugiej strony WP_Query jest znacznie łatwiejsze.

WP_Query jest na tyle pomocny, że możesz tworzyć niestandardowe zapytania, aby wyświetlić określoną treść na Twojej stronie internetowej bez konieczności jej wyszukiwania przez odwiedzającego.

Krótko mówiąc, WP_Query to narzędzie, które ułatwia programistom kontrolowanie, jakie treści są wyświetlane w witrynach WordPress i jak one wyglądają, bez konieczności pisania skomplikowanego kodu.

Załóżmy, że tworzysz specjalny typ treści w WordPressie zwany „blogiem”. Aby wyświetlić te wpisy „blogowe” na swojej stronie, możesz napisać specjalne zapytanie za pomocą WP_Query.

// WP QUERY
$query = new WP_Query([
'post_type' => 'blog', // Type of content
'posts_per_page' => 6, // Number of posts to show
'category_name' => 'Entertainment' // Category filter
]);

Teraz, aby wyświetlić żądane zapytanie, WP_Query udostępnia skróty i wbudowane funkcje, które pomagają dostosować pętlę. Pętla to fragment kodu PHP, którego WordPress używa do wyświetlania postów na stronie.

WordPress przetwarza i formatuje każdy post zgodnie z kryteriami ustawionymi w WP_Query (takimi jak typ postu, liczba postów i kategoria).

To potężne narzędzie pomaga programistom łatwo dostosować sposób, w jaki motywy WordPress wyświetlają treść, bez konieczności pisania skomplikowanych zapytań do bazy danych


WPOven Dedicated Hosting

Jak możesz wykorzystać WP_Query?

Teraz wiesz, czym jest WP_Query i co dokładnie robi. Przyjrzyjmy się różnym scenariuszom przypadków, w których możesz wykorzystać to potężne narzędzie.

1. Utwórz pętlę w WP_Query

Najpierw powinieneś zrozumieć, czym jest pętla. Jest to część WordPressa, która bardzo szybko reaguje na pobieranie danych z postów i wyświetlanie ich na Twojej stronie internetowej. Koncentruje się głównie na decydowaniu o wyglądzie treści na podstawie szablonów motywu.

Co pętla może pokazać na stronie internetowej?

W zależności od wybranych ustawień, pętla może wyświetlać:

  • Niestandardowe typy postów i niestandardowe pola
  • Publikuj tytuły i krótkie opisy na swojej stronie głównej
  • Treść i komentarze w jednym poście
  • Treść poszczególnych stron za pomocą tagów szablonowych

Dla lepszego zrozumienia poniżej znajduje się prosta struktura Loop.

Podstawowy przykład pętli

<?php
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Display post content
endwhile;
endif;
?>

  • Tutaj funkcja have_posts() sprawdza, czy są dostępne jakieś posty.
  • while ( have_posts() ) : the_post(); : Jeśli istnieją posty, ta pętla zostanie uruchomiona dla każdego postu i wyświetli jego treść.

Dostosowywanie pętli za pomocą WP_Query

Czasami nie chcesz wyświetlać wszystkich swoich postów. Możesz użyć WP_Query, aby dostosować to, co będzie wyświetlane:

<?php
// The Query
$the_query = new WP_Query( $args );

// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// No posts found
}
/* Restore original Post Data */
wp_reset_postdata();
?>

Jak działa ta niestandardowa pętla

  • Konfigurowanie zapytania : $the_query = new WP_Query( $args ); tworzy niestandardowe zapytanie na podstawie ustawionych parametrów (takich jak typ postu, kategoria itp.).
  • Uruchamianie pętli : if ( $the_query->have_posts() ) { ... } sprawdza, czy istnieją posty pasujące do Twojego zapytania. Jeśli tak, wyświetla tytuł każdego wpisu na liście.
  • Resetowanie danych pocztowych : wp_reset_postdata(); zapewnia przywrócenie oryginalnych danych pocztowych po uruchomieniu pętli niestandardowej.

Opcje dostosowywania

Dzięki WP_Query możesz:

  • Pokaż posty z określonej kategorii, autora lub zakresu dat
  • Wyświetlaj posty z określonymi tagami lub niestandardowymi polami

2. Argumenty WP_Query

Jeśli chcesz uzyskać określone posty ze swojej witryny WordPress, musisz utworzyć WP_Query i w tym celu musisz uwzględnić cztery podstawowe części:

  • Argument zapytania : informuje WordPress, jakie dane ma pobrać.
  • Zapytanie : używa argumentu do pobrania danych.
  • Pętla : przetwarza i wyświetla każdy post.
  • Post Data Reset : Resetuje dane po uruchomieniu pętli.

Ale jednym z najważniejszych elementów WP_Query jest argument (często nazywany argumentem WP_Query), który jest odpowiedzialny za wyodrębnienie konkretnego wpisu, który chcesz pobrać z bazy danych.

Jest to o tyle ważne, że zamiast pokazywać wszystkie posty, argument ustawia warunki, aby pokazać tylko wybrane posty.

Przykład argumentu

  • Linia $args : w tym miejscu podajesz argument zapytania.
  • Struktura : Umieszczasz określone parametry w tablicy. Oto podstawowy przykład,

$args = array(
'parameter1' => 'value',
'parameter2' => 'value',
'parameter3' => 'value'
);

Konkretny przykład

Jeśli chcesz wyświetlać posty ze znacznikiem „Błędy WordPress”, skonfiguruj argument zapytania w następujący sposób:

$query = new WP_Query( array( 'tag' => 'WordPress Errors' ) );

Dlaczego argument jest niezbędny

  • Brak argumentu, brak treści : jeśli nie podasz argumentu WP_Query, WordPress nie będzie wiedział, które posty wyświetlić. Twoje zapytanie nie pobierze żadnej treści z bazy danych.

3. Ustaw parametry WP_query

Parametry są czymś, co czyni WP_Query użytecznym i potężnym. Dzięki ich różnorodności każdy może łatwo odfiltrować wyszukiwania w bazie danych.

Na przykład, jeśli chcesz wyświetlać określone posty na swojej stronie WordPress, używasz WP_Query i aby mieć pewność, że otrzymasz właściwy post, możesz ustawić parametry. Być może masz w głowie inne pytanie: Jakie są parametry?

Cóż, parametry są jak instrukcje, które mówią WordPressowi, jakiego rodzaju posty mają pobierać z bazy danych.

Przykłady wspólnych parametrów

Oto kilka typowych parametrów, których możesz użyć:

  • cat : Wyświetla posty z określonych kategorii.
  • autor : Pokazuje posty jednego lub większej liczby określonych autorów.
  • post_status : Pokazuje posty, które są w toku, zaplanowane, opublikowane lub usunięte.
  • Orderby : Sortuje posty według autora, typu postu, daty itp.
  • posty_per_page : Ustawia liczbę postów do wyświetlenia.
  • tag : pokazuje posty z określonymi tagami.
  • kolejność : Sortuje posty w kolejności rosnącej lub malejącej.
  • post_type : Określa, czy wyświetlać posty, strony, czy niestandardowe typy postów.

Jak korzystać z parametrów

Jeśli chcesz pokazać posty z określonej kategorii, możesz użyć parametru category_name . Oto przykład:

$query = new WP_Query( array( 'category_name' => 'WordPress' ) );

Spowoduje to wyświetlenie wszystkich postów w kategorii „personel” i wszelkich podkategorii.

Bardziej złożony przykład

W tym przykładzie pokazujemy, jak można wykorzystać wiele wartości w różnych argumentach, aby utworzyć złożone i dostosowane zapytanie, które pobierze dokładnie te posty, które chcesz.

Będziemy pobierać posty należące do określonych kategorii, posiadające określone tagi, napisane przez określonych autorów i posortowane malejąco według daty.

$args = array(
'category__in' => array(5, 10), // Categories with IDs 5 and 10
'tag__in' => array('featured', 'popular'), // Posts tagged with 'featured' or 'popular'
'author__in' => array(1, 2), // Authors with IDs 1 and 2
'orderby' => 'date', // Order by date
'order' => 'DESC', // In descending order
'posts_per_page' => 10 // Limit to 10 posts
);

$query = new WP_Query($args);

// The Loop
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Display post content
the_title('<h2>', '</h2>');
the_excerpt();
}
} else {
// No posts found
echo 'No posts found';
}

// Restore original Post Data
wp_reset_postdata();

  • kategoria__in : Pomaga określić, że chcemy postów z kategorii o identyfikatorach 5 i 10.
  • tag__in : Określa, że ​​chcemy, aby posty były oznaczone tagiem „polecane” lub „popularne”.
  • autor__in : Określa, że ​​chcemy postów autorów o identyfikatorach 1 i 2.
  • Orderby : Określa, że ​​chcemy uporządkować posty według daty ich publikacji.
  • Order : Określa, że ​​chcemy, aby posty były wyświetlane w kolejności malejącej (najpierw najnowsze).
  • posty_per_page : Ogranicza liczbę pobranych postów do 10.

4. Modyfikuj obiekty metodami i właściwościami klas

W WordPressie WP_Query to specjalna klasa PHP używana do pobierania postów z bazy danych. Pomyśl o tym jak o narzędziu, które pomoże Ci uzyskać dokładnie takie posty, jakie chcesz wyświetlać w swojej witrynie.

Jakie są właściwości i metody klas?

W PHP klasa może mieć właściwości (takie jak zmienne) i metody (takie jak funkcje). Oto prosty sposób, aby je zrozumieć:

  • Właściwości : przypominają pojemniki przechowujące informacje. W kontekście WP_Query właściwości mogą obejmować takie rzeczy, jak lista postów lub liczba znalezionych postów.
  • Metody : Są to narzędzia lub czynności, które możesz wykonać. W WP_Query metody mogą pomóc Ci sprawdzić, czy są posty, uzyskać tytuł postu lub zresetować zapytanie.

Czy możesz zmienić właściwości bezpośrednio?

Nie, nie możesz zmieniać właściwości bezpośrednio, nawet programiści również bardzo to odradzają, ale możesz alternatywnie użyć metod.

Metody są jak oficjalne narzędzia lub polecenia, które pomogą Ci podążać właściwą drogą. To jest dokładnie to, co działa jak funkcje. Kiedy dokonasz pewnych zmian w metodach WP_Query, możesz także dostosować pobierane dane.

Przykład użycia metod w WP_Query

W tym przykładzie funkcja reset_postdata() może być krytycznym krokiem w pisaniu zapytania WP_Query. Ta metoda zresetuje właściwości $current_post i $post.

<?php
// Create a new query with specific arguments
$the_query = new WP_Query(array(
'post_type' => 'post',
'posts_per_page' => 5,
'category_name' => 'news',
));
?>

<?php if ($the_query->have_posts()) : ?>
<!-- Display the posts -->
<?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
<h2><?php the_title(); ?></h2>
<p><?php the_excerpt(); ?></p>
<?php endwhile; ?>
<!-- Reset the post data to avoid conflicts -->
<?php wp_reset_postdata(); ?>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>

Załamanie:
  • Tworzenie zapytania :
    • $the_query = new WP_Query($args); : Tworzy nowy obiekt WP_Query z podanymi argumentami.
  • Sprawdzanie postów :
    • if ($the_query->have_posts()) : Sprawdza, czy są jakieś posty do wyświetlenia na podstawie Twojego zapytania.
  • Przechodzenie przez posty w pętli :
    • while ($the_query->have_posts()) : $the_query->the_post(); : Konfiguruje dane pocztowe, dzięki czemu można je wyświetlić.
  • Wyświetlanie postów :
    • the_title(); the_excerpt(); : Wyświetla tytuł i fragment bieżącego wpisu.
  • Resetowanie danych pocztowych :
    • wp_reset_postdata(); : Resetuje globalne dane pocztowe do wpisu głównego zapytania. Jest to ważne, aby uniknąć zepsucia innych części strony.

Typowe metody, których możesz użyć

Oto kilka typowych metod w WP_Query , których możesz użyć do pracy z zapytaniem:

  • get_posts :
    • Działanie : Pobiera listę postów.
    • Przykład : kod phpCopy $posts = get_posts(array('category' => 'news'));
  • have_posts :
    • Co robi : Sprawdza, czy są jakieś posty do wyświetlenia.
    • Przykład : kod phpCopy if ($the_query->have_posts()) { // There are posts to show }
  • the_post :
    • Działanie : Konfiguruje bieżące dane pocztowe.
    • Przykład : kod phpCopy $the_query->the_post();
  • fill_query_vars :
    • Działanie : uzupełnia brakujące szczegóły zapytania.
    • Przykład : kod phpCopy $the_query->fill_query_vars($args);

Dostarczając WP_Query odpowiednie informacje, możesz dostosować go do wykonywania różnych zadań. Ta metoda jest elastycznym i bezpiecznym sposobem dostosowywania właściwości klasy.


WP_Query kontra query_posts(): Który jest lepszy?

Poniżej znajduje się szczegółowa tabela porównawcza WP_Query vs. query_posts() w WordPress, zawierająca niektóre główne punkty, które mogą pomóc Ci zrozumieć, dlaczego WP_Query jest ogólnie preferowane zamiast query_posts() :

Funkcja WP_Zapytanie zapytanie_posty()
Zamiar Twórz niestandardowe zapytania do pobierania postów z bazy danych. Zmodyfikuj główne zapytanie na stronie (niezalecane do ogólnego użytku).
Główne zastosowanie Idealny do tworzenia nowych zapytań i wyświetlania postów w niestandardowy sposób. Zwykle używane do zmiany głównego zapytania, ale nie jest zalecane.
Zalecane użycie Tak, jest to zalecany sposób pobierania i wyświetlania postów. Nie, najlepiej unikać używania tej funkcji w głównej pętli, wtyczkach i motywach.
Wpływ na zapytanie główne Nie ma wpływu na główne zapytanie. Możesz uruchamiać niestandardowe zapytania bez zmiany głównej pętli. Całkowicie zastępuje główne zapytanie, co może powodować konflikty lub nieoczekiwane wyniki.
Resetowanie danych pocztowych Użyj wp_reset_postdata() , aby przywrócić oryginalne zapytanie po uruchomieniu zapytania niestandardowego. Brak równoważnej funkcji, co oznacza, że ​​może być konieczne ręczne przywrócenie danych pocztowych głównego zapytania.
Obsługa wielu zapytań Może obsługiwać wiele zapytań i jest przeznaczony do złożonych scenariuszy. Obsługuje tylko jedno zapytanie i zmienia zapytanie główne, co może być problematyczne w przypadku wielu zapytań.
Wpływ na wydajność Ogólnie lepszy pod względem wydajności, ponieważ nie zmienia głównego zapytania. Może być mniej wydajny i może powodować problemy ze względu na wpływ na główne zapytanie.
Przykłady zapytań niestandardowych $custom_query = new WP_Query(array('post_type' => 'post', 'posts_per_page' => 5)); query_posts(array('post_type' => 'post', 'posts_per_page' => 5));
Przykład resetowania danych <?php wp_reset_postdata(); ?> Brak funkcji resetowania, w przypadku wprowadzenia zmian w głównym zapytaniu wymagany jest reset ręczny.
Łatwość użycia Łatwy w użyciu dzięki wbudowanym metodom i funkcjom do wysyłania zapytań do postów i stron. Mniej proste i może prowadzić do problemów, jeśli nie będzie używane ostrożnie.
WP_Query kontra query_posts()

WPOven Dedicated Hosting

Kilka przykładów użycia WP_Query

Aby lepiej zrozumieć WP_Query i jego praktyczne zastosowanie, zapoznaj się z niektórymi przykładami podanymi poniżej:

1. Pokaż najnowsze posty opublikowane w tym tygodniu

Jeśli masz dobrą bazę użytkowników lub przyzwoity ruch w sieci, oznacza to, że odwiedzający lubią Twoje treści i będą chcieli przeczytać najnowsze artykuły opublikowane w Twojej witrynie.

Projektując swoją stronę internetową, możesz zamieścić najnowsze wpisy w dedykowanej sekcji strony. Na szczęście dzięki WP_Query możesz łatwo znaleźć posty na podstawie parametrów daty. Zobaczmy jak.

<?php
$arguments = array(
"date_query" => array(
array(
"year" => date( "Y" ),
"week" => date( "W" ),
)
)
);
$posts = new WP_Query($arguments);
?>

W tym przykładzie tworzymy WP_Query, aby znaleźć posty opublikowane w bieżącym tygodniu. Używamy specjalnej części WP_Query o nazwie date_query , aby określić nasze kryteria wyszukiwania.

Głównym celem zapytania było znalezienie postów opublikowanych w bieżącym tygodniu. W tym celu użyliśmy parametru date_query do wyszukiwania postów na podstawie dat. Pobiera tablicę argumentów związanych z datą.

Zatem po dostosowaniu parametru date_query możesz pobierać i wyświetlać ostatnio opublikowane posty. Możesz jednak także określić wartości niestandardowe, aby zwiększyć skuteczność zapytania i wyróżnić najnowsze artykuły napisane w zeszłym tygodniu.


2. Pokaż najnowszy post w określonej kategorii

Odwiedzający Twoją witrynę mogą często szukać najnowszych informacji. Aby zwiększyć zaangażowanie i liczbę wyświetleń stron, dobrą praktyką jest sugerowanie kilku powiązanych postów, które mogą im się spodobać.

Chociaż istnieje wiele sposobów łączenia powiązanych postów w WordPressie, WP_Query jest jednym ze skutecznych sposobów, aby to zrobić. Szczególnie świetny sposób na stronę internetową, która zawsze publikuje aktualne treści.

Na przykład, jeśli ktoś przeczyta artykuł o błędach WordPressa, WP_Query może pomóc wyświetlić inne podobne i najnowsze artykuły.

Jeśli więc chcesz pobrać najnowsze posty w określonej kategorii, użyj tego WP_query i wprowadź drobne zmiany, które obejmują informacje o Twojej witrynie:

<?php

// 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 new query instance.
$my_query = new WP_Query( $args );

?>


3. Pokaż posty tego samego autora i tej samej kategorii

Jest wysoce prawdopodobne, że jeśli odwiedzający spodoba się Twoja treść, spodobają mu się poglądy autora, styl pisania i sposób postrzegania.

W tym celu możesz użyć WP_Query, aby zasugerować czytelnikom podobne posty napisane przez tego samego autora. Zapytanie wyszuka posty napisane przez tego samego autora w tej samej kategorii co bieżący post.

W tym celu musimy utworzyć konkretny ciąg WP_Query, który będzie wyszukiwał posty o podobnych autorach i tej samej kategorii.

Oto kod:

<?php
$arguments = array(
"author_name" => "Rahul",
"category_name" => "WordPress",
"posts_per_page" => 3,
);
$posts = new WP_Query($arguments);
?>

W powyższym kodzie należy zastąpić „Rahul” imieniem autora i „WordPress” nazwą kategorii.


4. Pokaż swoje najpopularniejsze posty

Podobnie jak najnowsze lub najnowsze posty, które wyświetliłeś swoim czytelnikom. możesz także chcieć wyświetlać posty na tematy, które lubią Twoi czytelnicy i którymi bardzo się angażują. Aby to osiągnąć, możesz użyć parametru Orderby i przekazać go do argumentu comment_count .

<?php
$arguments = array(
"category_name" => "WordPress Errors",
"orderby" => "comment_count",
"posts_per_page" => 5,
);
$posts = new WP_Query($arguments);
?>

Powyższa funkcja WP_Query będzie szukać postów w kategorii „Błędy WordPress” i filtrować wyniki według liczby komentarzy do każdego postu.

W wynikach zostanie wyświetlonych pięć postów z największą liczbą komentarzy, w kolejności malejącej od lewej do prawej, zaczynając od postu z największym zaangażowaniem, a kończąc na najniższym.


Wniosek

Teraz widziałeś, jak potężny jest WP_Query i jak ułatwia wykonywanie żądań do bazy danych w WordPress. Zapewnij także elastyczność dostosowywania witryny i zapewniania odwiedzającym wyjątkowych wrażeń.

Aby użyć WP_Query, możesz:

  • Utwórz pętlę: Wyświetlaj swoje posty.
  • Użyj argumentów zapytania: Dostosuj swoje wyszukiwania.
  • Ustaw określone parametry: filtruj wyniki.
  • Modyfikuj właściwości klasy: Dostosuj wyniki zapytania za pomocą metod.

Jeśli opanujesz wszystkie te techniki, będziesz mógł łatwo polecać konkretne posty na podstawie różnych czynników, takich jak popularność i data.

Technika ta pomaga zwiększyć zaangażowanie użytkownika, poprawić jego doświadczenie, a także pomóc lojalnym odwiedzającym w znalezieniu bardziej odpowiednich treści.

Jeśli nadal masz wątpliwości dotyczące WP_Query lub chciałbyś dodać więcej treści, które mogliśmy przeoczyć. Daj nam znać w sekcji komentarzy poniżej.