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

Samouczek motywu WordPress dla początkujących – część 12: Niestandardowe zapytanie post

11

W tej ostatniej lekcji nauczymy się pisać własne zapytanie o posty i przechodzić przez nie bez przerywania pętli nadrzędnej w szablonie. Stworzymy część szablonu dla pojedynczych postów, która pokazuje powiązane posty w tej samej kategorii.

To, co zrobimy w tej lekcji, to powiązane zapytanie o posty w naszym widoku pojedynczego postu, pokazujące maksymalnie 3 posty, post typu post, w tej samej kategorii lub kategoriach co post, w którym się znajdujemy, z wyłączeniem samego bieżącego posta, i losuj wyświetlane posty. Przyjrzymy się również strategiom, które nie psują zagnieżdżonej pętli.

Szablon powiązanych postów

Uczyńmy powiązane posty trochę szablonową częścią, o której dowiedzieliśmy się w części 10. W ten sposób nie komplikujemy nadmiernie single.phpi nie zwiększamy możliwości ponownego wykorzystania naszego kodu. Umieść żądanie tej nowej części szablonu w dowolnym miejscu. Umieszczę go tuż przed prośbą o szablon komentarzy:

Teraz utwórzmy nowy pusty plik w naszym folderze motywu i nazwijmy go related-posts.php. Dzięki temu plikowi jesteśmy gotowi do zagłębienia się w tworzenie niestandardowego zapytania do posta.

Niestandardowe zapytanie post

Jeśli chcesz utworzyć niestandardowe zapytanie o posty, masz kilka opcji, ale polecam przyzwyczaić się do klasy WP_Query. Dodaj tę stronę dokumentacji do zakładek, ponieważ będziesz do niej często się odwoływać, ponieważ jest tak wiele opcji. Pokażę Ci praktyczny przykład konfiguracji zapytania, odwołując się do dokumentacji dla każdej specyfikacji, którą chcemy dodać.

Jeśli chcesz dowiedzieć się więcej o tym, jak wyszukiwać posty, mam post, który szczegółowo o tym mówi.

Aby utworzyć niestandardowe zapytanie o post, wywołamy new WP_Query(), przekażemy do niego tablicę argumentów i zapiszemy jego wynik w zmiennej. A potem użyjemy dokładnie tej samej pętli, której używaliśmy wcześniej w naszych szablonach (spójrz na oryginalną pętlę tutaj, aby porównać). Ale musimy powiedzieć pętli, aby przeszła przez zmienną, a nie globalną (która jest pojedynczym postem).

Oto jak będzie wyglądać pętla po dodaniu jej do niestandardowego zapytania:

Jak widać, pętla jest dokładnie taka sama, używając have_postsi the_post. Różnica polega na tym, że wywołujemy je na $related_postsobiekcie. Jeśli pominiemy tę $related_postsczęść, WordPress automatycznie przyjmie, że jest to globalne zapytanie o posty.

Możesz również zauważyć wywołanie funkcji wp_reset_postdata()zaraz po pętli. W ten sposób „sprzątamy po sobie" po niestandardowym zapytaniu z WP_Query. Pamiętaj, że the_post()konfigurujemy globalny obiekt post, abyśmy mogli używać the_title()itp. A ponieważ już jesteśmy w pętli (tej w single.php), musimy się upewnić sprzątamy i resetujemy post z powrotem do pojedynczego posta po zakończeniu. Jeśli nie zresetujemy postdata, wszystko po tym będzie odnosić się do ostatniego powiązanego posta, przez który przeszliśmy. To może być duży problem! W naszym przykładzie mieć szablon komentarzy, który następuje po tym.Pominięcie resetowania spowoduje, że szablon komentarza będzie wyświetlał komentarze z ostatniego powiązanego posta w pętli.A nie pojedynczego posta, na który faktycznie patrzymy!

Wdrażanie naszej niestandardowej pętli

Dobrze, zacznijmy implementować niestandardową pętlę w naszym related-posts.php. Dodałem wrapper i tytuł, ale jak zwykle możesz dostosować HTML według własnego uznania:

Teraz zobaczymy siłę wielokrotnego użytku w częściach szablonów. Załóżmy, że wewnątrz tej niestandardowej pętli chcemy pokazać dokładnie taką samą zawartość jak w naszym content-loop.php, której używamy w naszych szablonach archiwum. Wszystko, co musimy zrobić, to zażądać tej części szablonu w naszej niestandardowej pętli, czy wszyscy jesteśmy przygotowani do obsługi wyjścia każdego posta!

Teraz pozostaje tylko dodać argumenty do naszego zapytania post, upewniając się, że pobieramy to, czego chcemy. Przeanalizujmy argumenty jeden po drugim.

Budowanie argumentów do naszego niestandardowego zapytania post

Chcemy pobrać nie więcej postów niż 3. W dokumentacji (sekcja „Parametry paginacji”) argumentem na to jest posts_per_page. Dodajemy więc element tablicy:

Chcemy mieć pewność, że WordPress pobiera posty, a nie strony lub coś innego. W „Parametry typu posta” znajdujemy:

Chcemy zapobiec sytuacji, w której pojedynczy post, na którym się znajdujemy, pojawia się w naszym zapytaniu o posty, ponieważ to nie ma sensu, prawda? Dokumentacja mówi nam w „Parametry postu i strony”, że możemy dodać identyfikator posta w tablicy dla post__not_in:

Chcemy również losować posty; ponieważ domyślnie pobierze najnowsze opublikowane posty, co może szybko stać się dość powtarzalne podczas przeglądania postów. Na szczęście WordPress ma do tego funkcję w sposobie porządkowania postów; w „Kolejność i porządek według parametrów” znajdujemy:

Na koniec chcemy odpytywać posty, które należą do tych samych kategorii, co post, w którym się znajdujemy. Aby to zrobić, musimy najpierw, przed argumentami zapytania, pobrać kategorie do pojedynczego postu, w którym się znajdujemy. W „Parametry kategorii” widzimy, że możemy dostarczyć tablicę identyfikatorów kategorii do category__in. Na szczęście WordPress ma funkcję pobierania identyfikatorów kategorii dla posta; wp_get_post_categories()którego możemy użyć bezpośrednio jako wartości parametru. Idealny!

Oto ostatnie zapytanie i jego argumenty:

Odśwież i powinieneś zobaczyć 3 posty wymienione na dole pojedynczego widoku. Odświeżaj kilka razy, aby zobaczyć, że się zmieniają, ponieważ poleciliśmy WordPressowi ich losowanie. Uwaga: Jeśli masz mniej niż 3 posty w tej samej kategorii, otrzymasz mniej niż 3 posty.

Otóż ​​to! Teraz wiesz, jak wysyłać zapytania do dowolnych postów. Strona dokumentacji WP_Query jest niezwykle pomocna w ulepszaniu zapytania, ponieważ ma tu naprawdę nieograniczone możliwości. Zachęcam do zabawy z parametrami i być może do stworzenia osobnej części szablonu do wykorzystania w powiązanych postach.

Ź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