✅ Nowości, motywy, wtyczki WEB i WordPress. Tutaj dzielimy się wskazówkami i najlepszymi rozwiązaniami dla stron internetowych.

Przewodnik: Jak wysyłać zapytania do postów w WordPress

48

Jakie metody są dostępne do tworzenia niestandardowych zapytań o posty i kiedy najlepiej ich użyć? Ten post ma na celu ustalenie solidnego zrozumienia dwóch metod odpytywania postów, jak uzyskać dostęp do wyników, jak budować argumenty i wreszcie jak po nich posprzątać. Dwie metody, którym się przyjrzymy, to get_posts()i WP_Query.

Jeśli chodzi o tworzenie nowego zapytania o post, tak naprawdę są dwie opcje (w momencie pisania). Wybór tak naprawdę zależy tylko od twoich preferencji (i niewielkiego efektu wydajności). Jedna opcja może zepsuć globalną pętlę/zapytanie, w którym aktualnie się znajdujesz, chyba że obsłużysz je poprawnie. W jednej opcji obsługujesz obiekty, a w drugiej obsługujesz tablicę. Argumenty za dostosowaniem zapytania post są jednak identyczne.

Zapytanie globalne?

Jeśli nie masz pewności, co mam na myśli przez „zamieszanie w globalnym zapytaniu", to jest to. WordPress zawsze tworzy jedno globalne zapytanie, w zależności od tego, na której stronie jesteś. Jeśli odwiedzający odwiedza archiwum kategorii, WordPress utworzył dla tego zapytanie post Motyw normalnie uzyskiwałby dostęp do postów w zapytaniu za pomocą „pętli”.Kiedy tworzymy nowe zapytanie z własną pętlą wewnątrz tej pętli, musimy upewnić się, że globalne zapytanie WordPressa i nasze zapytanie są obsługiwane oddzielnie.

Jeśli jednak chcesz zmodyfikować zapytanie o posty WordPress, to już inna historia. Mam inny post, który szczegółowo wyjaśnia, jak to zrobić.

Spójrzmy na dwie opcje, które mamy i jak sobie z nimi radzimy. Następnie przyjrzymy się argumentom dostosowania zapytania. Pamiętaj, że argumenty są identyczne dla obu.

Dwie metody odpytywania postów

Możesz wyszukiwać posty za pomocą funkcji get_posts()lub tworząc nową instancję WP_Query.. Pierwsza opcja zwraca tablicę postów, a druga obsługuje obiekt. Ponieważ get_posts()zwraca tablicę zawierającą tylko posty, zwykle łatwiej jest użyć tego w dowolnym miejscu. Jeśli jednak chcesz podzielić zapytanie na strony, zdecydowanie powinieneś stworzyć WP_Queryinstancję.

Funkcja get_postsjest funkcją opakowującą, WP_Queryco oznacza, że ​​akceptuje te same argumenty, ale get_postsma kilka dodatkowych argumentów „aliasów”. Strona dokumentacji WordPress dla get_posts nie wymienia możliwych argumentów (z wyjątkiem argumentów aliasów), ale odsyła do strony dokumentacji dla WP_Query dla argumentów. Argumentom przyjrzymy się bliżej później.

Jeśli wydajność jest problemem (np. witryna zawiera wiele postów), get_postsjest szybszy niż używanie WP_Query, ponieważ pomija obliczenia dotyczące paginacji.

Metoda przeglądania niestandardowego zapytania postów różni się w zależności od wybranej metody. Powinieneś znać powszechną pętlę WordPress używaną w prawie wszystkich szablonach motywów:

if (have_posts()) { while (have_posts()): the_post(); // Access to each post; you can use template tags here endwhile; }

Zapętlanie za pomocą WP_Query

Zapętlenie wyników używania WP_Queryjest dokładnie takie samo, z wyjątkiem tego, że odwołujemy się konkretnie do obiektu instancji w pętli. Musimy również pamiętać, aby „zresetować stan” po zakończeniu pętli, aby globalny obiekt post powrócił do poprzedniego stanu. W tym celu używamy wp_reset_postdata().

Jeśli zrzucisz obiekt utworzony przez WP_Query( $custom_queryw powyższym przykładzie), znajdziesz pełne zapytanie i użyte argumenty. Interesujące części to właściwości ‘ found_posts‘ i ‘ posts‘. Właściwość „ posts” zawiera wynik obiektów postu, przez które przejdzie pętla. Liczba wpisów pasujących do zapytania jest zwracana w „ found_posts” i jest przydatna, jeśli chcesz utworzyć niestandardową paginację. Podziel tę wartość z ustawieniem WordPress’ dla liczby postów na stronie, aby dowiedzieć się, ile stron potrzebujesz dla zapytania, lub po prostu odnieś się do właściwości „ max_num_pages“.

Uwaga: gdy używasz get_postsWordPressa, zwraca tylko właściwość „ posts” (która jest tablicą) z WP_Queryobiektu.

Zapętlanie za pomocą get_posts

Używając get_postsnie używamy zwykłej „pętli WordPress”, zamiast tego używamy zwykłej pętli tablicowej PHP. Każdy element w tablicy to obiekty post i po zakończeniu zapętlania nie jest konieczne resetowanie. Pamiętaj, że w tej pętli nie są dostępne tagi szablonów (takie jak itp.) the_title(). the_permalink()Musisz odwołać się do właściwości obiektu posta (np $custom_post->ID. ).

Zalecam nadanie nazw obiektom postów w inny sposób niż $post. Możesz napotkać problemy podczas próby uzyskania dostępu do właściwości postu (może to odnosić się do globalnego obiektu post, a nie do wpisu w pętli).

Jeśli chcesz używać tagów szablonów w celu łatwiejszego dostępu do informacji o wpisie (takich jak the_title()i the_permalink()), możesz to zrobić. Zrób to, mówiąc WordPressowi, aby ustawił globalny obiekt postu w pętli za pomocą setup_postdata(). Jeśli to zrobisz, będziesz musiał zresetować stan za pomocą wp_reset_postdata()po pętli.

$custom_query = get_posts([/ Arguments here /]); foreach ($custom_query as $post) { setup_postdata($post); // Template tags are available here, for example: the_title(); } wp_reset_postdata();

Pamiętaj, że setup_postdataobiekty, przez które przechodzisz (część „ as” w pętli foreach), muszą mieć nazwy $post! W pierwszym przykładzie nazwałem obiekty post $custom_posti to nie zadziałałoby setup_postdata().

Jeśli jednak potrzebujesz dostępu do podstawowych informacji o wpisie, równie dobrze możesz pominąć konfigurowanie globalnego obiektu postu i zamiast tego używać odpowiednich get_tagów „-template” i identyfikatora posta. Na przykład tag the_permalink()działa poprawnie tylko wtedy, gdy skonfigurowany jest globalny obiekt postu, ale możesz zażądać bezpośredniego linku do posta bez globalnego obiektu postu, używając po prostu echo get_the_permalink($custom_post->ID).

Argumenty zapytania

Pełną listę wszystkich możliwych argumentów można znaleźć na stronie dokumentacji WP_Query. Przykładami parametrów są posty z określonymi terminami z taksonomii, wartości meta postów, typy postów, włączanie lub wyłączanie określonych postów oraz cały szereg opcji porządkowania wyników. Jest ich zbyt wiele, aby szczegółowo omówić każdy z nich, ale oto kilka typowych przykładów argumentów za zapytaniami o posty.

Przykład 1: Powiązane posty z tej samej kategorii

Załóżmy, że chcesz wyświetlić „pokrewne posty” na końcu jednego posta. Powinien pokazywać losowy wybór 3 postów, które są w tej samej kategorii co aktualny post i powinien wykluczać bieżący post z wyniku.

Argumenty są dość oczywiste. Proszę tylko o post‘ w ‘ post_type‘ i maksymalnie 3 posty w ‘ posts_per_page'.

Do odpytywania postów w kategoriach możesz zbudować tax_query lub użyć prostszego „ category__in” (Uwaga: działa tylko dla kategorii postów). W powyższym przykładzie używam, wp_get_post_categories()aby uzyskać tablicę identyfikatorów terminów przypisanych do podanego posta i użyć tego jako argumentu „ category__in“.

Możesz wykluczyć identyfikatory postów za pomocą „ post__not_in“, podczas gdy ja podałem bieżący identyfikator posta. Na koniec poprosiłem o losową kolejność postów, ustawiając ‘ rand‘ w ‘ orderby‘. Możesz podać np. ‘ title‘ lub ‘ date‘, aby zamówić je w inny sposób. Zajrzyj do dokumentacji zamówienia, aby zobaczyć, co jest możliwe.

Przykład 2: Wszystkie posty z niestandardowego typu postu z wieloma argumentami porządkowania

W tym przykładzie zakładamy, że masz niestandardowy typ posta „ book“, aw niestandardowym szablonie strony chcesz wyświetlić wszystkie opublikowane książki. Chcesz uporządkować posty przede wszystkim według menu_order (atrybut strony, jest to liczba, którą możesz ustawić na post), a po drugie według tytułu posta.

Ponownie, argumenty są dość oczywiste. Proszę o wpisanie wpisu „ book” jako „ post_type“. Gdy ustawisz ‘ posts_per_page‘ na -1, pobierze wszystkie (opublikowane posty, chyba że określisz coś innego w post_statusargumencie ‘ ‘). Na koniec dostarczam tablicę „ orderby“, aby powiedzieć WordPressowi, aby sortował posty głównie według kolejności menu w kolejności rosnącej, a po drugie tytuł posta w kolejności malejącej.

Przykład 3: posty z niestandardowymi metadanymi

Załóżmy, że masz niestandardowy typ wpisu „ book” i chcesz wyszukać wszystkie książki, które są nieopublikowane lub książki opublikowane w latach 1990–2019.

Tworzenie zapytania przy użyciu meta postu najlepiej wykonać za pomocą meta_query(dla bardzo prostych argumentów meta można użyć meta_keyi meta_valuebezpośrednio). Argument „ meta_query” wymaga tablicy, gdzie każdy argument jest tablicą. Możesz kontrolować relację między każdym argumentem za pomocą ‘ relation‘, które ustawiłem na ‘ OR‘ w powyższym przykładzie.

Podaję dwa argumenty metadanych do „ meta_query“. Pierwszy po prostu porównuje metaklucz „ book_status” z tekstem „ unpublished” i jeśli jest równy, zostanie uwzględniony. W drugim argumencie każę WordPressowi pobrać dowolną wartość w metakluczu „ year_published“, która znajduje się między liczbami 1990 a 2019.

Wniosek

Powinieneś teraz mieć podstawową wiedzę na temat dwóch metod odpytywania postów. Nie ma dużej różnicy, ponieważ możesz zbudować to samo zapytanie za pomocą obu, ale sposób obsługi tych dwóch jest inny. Trzy podane przykłady argumentów zapytań dotykają tylko powierzchni tego, jakie zapytania możesz zbudować. Zapoznaj się z dokumentacją WP_Query, aby uzyskać pełny przegląd z wieloma przykładami.

Jeśli jesteś ciekawy, jak zmodyfikować globalne zapytanie, które wykonuje WordPress, mam osobny post, który szczegółowo o tym mówi.

Źródło nagrywania: awhitepixel.com

Ta strona korzysta z plików cookie, aby poprawić Twoje wrażenia. Zakładamy, że nie masz nic przeciwko, ale możesz zrezygnować, jeśli chcesz. Akceptuję Więcej szczegółów