Budujemy customowe WP_Query
Zobacz jak zbudować niestandardowe zapytania odnosząc się do klasy zdefiniowanej w Wordpress. Dzięki custom WP_Query dostaniemy się do danych dostępnych w bazie danych.
Co to jest WP_Query ?
WP_Query, jest klasą zdefiniowaną w WordPress. Pozwala ona developerom na tworzenie nietypowych zapytań do bazy danych dzięki przekazywanym argumentom.
Przykład zapytania
<?php
$args = array(
'post_type' => 'post',
);
$query = new WP_Query($args);
?>
<ul>
<?php while ($query->have_posts()) : $query->the_post();
?>
<li><?= the_title(); ?></li>
<?php endwhile; ?>
</ul>
Jest to przykładowe zapytanie do bazy danych, które zwróci nam wszystkie wpisy dodane na stronie po czym wyświetli je nam jako listę wpisów.
Informacje, które chcemy uzyskać z bazy danych przekazujemy do zmiennej $args (ogólnie przyjęta nazwa zmiennej dla argumentów). Zamiast 'post_type’ => 'post’, możemy na przykład pobrać posty zawarte w konkretnej kategorii poprzez dopisanie kolejnych argumentów do zmiennej $args. Np. 'category_name’ => 'nazwa_kategorii’,
Lista argumentów dostepnych w WP_Query
Autor
'author' => 1, // (int) Podajemy ID autora
'author_name' => 'artur', // (string) - używa 'user_nicename'
Kategorie
'cat' => 5,
// (int) - podajemy numer ID danej kategorii
'category_name' => 'nazwa',
// (string) - podajemy "slug" kategorii
'category__and' => array( 2, 6 ),
// (array) - przyjmuje ID kategorii.
'category__in' => array( 2, 6 ),
// (array) - przyjmuje ID kategorii.
'category__not_in' => array( 2, 6 ),
// (array) - przyjmuje ID kategorii.
Tagi
'tag' => 'cooking',
// (string) - używa sluga.
'tag_id' => 5,
// (int) - korzysta z ID tagu.
'tag__and' => array( 2, 6),
// (array) - korzysta z ID tagu.
'tag__in' => array( 2, 6),
// (array) - korzysta z ID tagu.
'tag__not_in' => array( 2, 6),
// (array) - ukorzysta z ID tagu.
'tag_slug__and' => array( 2, 6),
// (array) - używa sluga.
'tag_slug__in' => array( 2, 6),
// (array) - używa sluga.
Post
'p' => 1,
// (int) - używa ID postu.
'name' => 'hello-world',
// (string) - używa sluga postu.
'page_id' => 1,
// (int) - używa ID strony.
'pagename' => 'sample-page',
// (string) - używa sluga strony.
'pagename' => 'sample-page/child',
// (string) - wyświetla zagnieżdzoną stronę
'post_parent' => 1,
// (int) - używa ID strony. Zwraca zagnieżdzone strony.
'post__in' => array(1,2,3),
// (array) - używa ID postu. Pobieramy ID postów podanych w tablicy.
'post__not_in' => array(1,2,3),
// (array) - używa ID postu. NIE pobieramy ID postów podanych w tablicy.
Post – typ i status
Poza zapytaniami podanymi powyżej, możemy również „zapytać” o typ i status wpisów.
'post_type' => array( //(string / array) - używa typów postów;
'post', // - wpis.
'page', // - strona.
'revision', // - rewizja.
'my-post-type' // - przyjmuje customowe typy postów np. 'moje-filmy'
),
'post_status' => array( //(string / array) - używa "statusu" postu. Standardowo wykorzystuje 'publish'. Możemy wyświetlić również oczekujące, szkice oraz szkice automatyczne
'publish', // - opublikowana strona lub wpis.
'pending', // - wpis oczekujący.
'draft', // - szkic.
'auto-draft' // - nowo utworzony, jeszcze bez treści
'future' // - wpis który ma być opublikowany w przyszłości
'private' // - niewidoczny dla niezalogowanych użytkowników
'inherit' // - rewizja, zobacz get_children.
'trash' // - wpis w "koszu" (WP od wersji 2.9).
'any' // - pobiera dowolny status z wyjątkiem tych z typów postów z ustawieniem „exclude_from_search” na true.
),
Parametry paginacji
'posts_per_page' => 10,
// (int) - liczba postów która ma zostać wyświetlona. Ustawienie na '-1' spowoduje pobranie wszystkich postów.
'posts_per_archive_page' => 10,
// (int) - liczba postów do wyświetlenia tylko na stronach archiwum. Zastępuje wyświetlanie postów posts_per_page na stronach, na których is_archive() lub is_search() byłoby ustawione na 'true'
'nopaging' => false,
// (bool) - pokaże wszystkie posty lub użyje paginacji. Wartość domyślna to „false”.
'paged' => get_query_var('page'),
// (int) - pokazuje posty na "podstronach"
Różne
'offset' => 3,
// (int) - wyświetla "query" od numeru elementu podanego w kluczu offset
'order' => ASC,
// Kolejność wyświetlania
//'ASC' - rosnąco od najniższych do najwyższych wartości (1, 2, 3; a, b, c).
//'DESC' - kolejność malejąca od najwyższych do najniższych wartości (3, 2, 1; c, b, a).
Przykładowe zapytanie
Stwórzmy przykładowe zapytanie o wpisy z kategorii o nazwie „biblioteka”, które wyświetli nam 10 postów w kolejności rosnącej z pominięciem pierwszego wpisu
<?php
$args = array(
'post_type' => 'post',
'category_name' => 'biblioteka',
'order' => 'ASC',
'offset' => 1,
'post_per_page' => 10,
);
$query = new WP_Query($args);
?>
<ul>
<?php while ($query->have_posts()) : $query->the_post();
?>
<li><?= the_title(); ?></li>
<?php endwhile; ?>
</ul>
Więcej na temat WP_Query możesz przeczytać na stronie WordPressa https://developer.wordpress.org/reference/classes/wp_query/
Komentarze
Zobacz również
Czym jest add_action() ?
add_action to funkcja w języku PHP używana w kontekście WordPress, która dodaje…
Tworzymy rozwijane panele jako blok ACF
Czym są rozwijane panele ? Rozwijane panele inaczej akordiony (ang. accordion) są…
Hooki na stronie koszyka w WooCommerce
Hooki w koszyku Zastanawiacie się jak edytować stronę koszyka w WooCommerce ?…
Bloki ACF
Czym są bloki ACF ? Advanced Custom Fields umożliwia twórcom stron opartych…
Ajax w WordPress
Czym jest asynchroniczność? Dzięki asynchroniczności działanie przeglądarki nie zostaje zablokowane przez skrypt,…