Napisałem kilka postów tutaj na blogu o klasie WP_Query i jak jej używać do tworzenia wielu zapytań i wielu pętli.

Jestem wielkim fanem WP_Query i często używać go na stronach klientów i własnej stronie do tworzenia zaawansowanych i niestandardowych zapytań.

Jednak ma swoje wady, jeśli przesadzasz. Jeden czytelnik słusznie skomentował mój ostatni post na temat używania pętli, aby inaczej stylizować swój pierwszy post, że technika, którą demonstrowałem, może być bardziej wydajna.

Więc w tym poście, mam zamiar pokazać, jak używać WP_Query aby utworzyć wiele pętli, ale w najbardziej efektywny sposób-i to przez uruchomienie tylko jednego zapytania, ale następnie za pomocą go do utworzenia wielu pętli.

Zaletą tego jest to, że odwiedzasz bazę danych tylko raz. Następnie można wykorzystać wszystkie dane, które WP_Query pobiera, aby uruchomić tyle pętli, ile potrzebujesz.

Więc zanurkujmy i zobaczmy, jak to działa.

Co będziemy robić

W tym poście zamierzam utworzyć sekcję na górze strony głównej mojej witryny, która wyświetla najnowsze i określone treści z wielu typów postów. Konkretnie, to będzie wyświetlać:

  • Mój ostatni post z niestandardowego typu post
  • Dwa posty z post typ postu: po jednym z każdej z dwóch kategorii.
  • Konkretnej strony.

Oczywistym sposobem, aby to zrobić, byłoby napisanie czterech (a może trzech, jeśli możesz po prostu użyć jednego dla obu postów) instancji WP_Query, z których każdy zwraca jeden post. Ale zamiast tego ucieknę. WP_Query raz, aby pobrać wszystkie posty, których potrzebuję, a następnie uruchomić pętlę cztery razy, aby wyświetlić wymagane posty. Za każdym razem, gdy uruchomię pętlę, użyję zmiennej o nazwie $count i zwiększę jej wartość o 1, aby móc to sprawdzić w następnej pętli.

Czego potrzebujesz

Aby śledzić ten post, potrzebujesz kilku rzeczy:

  • Instalacja rozwojowa WordPress
  • Edytor kodu

Konfigurowanie Zapytania

Pierwszą rzeczą do zrobienia jest uruchomienie zapytania. Umieszczam ten post w moim pliku szablonu motywu na stronie głównej, pierwsza strona.php. Ale możesz umieścić go w dowolnym miejscu w swoim motywie, w którym chcesz uruchomić wiele pętli.

Uwaga: jeśli pracujesz z motywem innej firmy, umieść to wszystko w motywie podrzędnym, a nie w motywie innej firmy. Jeśli nie wiesz, jak skonfigurować motyw potomny, zapoznaj się z naszym przewodnikiem.

Oto moje zapytanie:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

To zapytanie pobierze posty trzech typów postów: posty, strony i mój niestandardowy typ postu książki.

Więc teraz pobraliśmy posty z bazy danych, musimy zacząć konfigurować kod, aby je wypisać.

Konfigurowanie wyjścia

Po zapytaniu i wewnątrz nawiasów, dodaj to:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Tworzy to sekcja element, który będzie zawierał wszystkie nasze posty. Definiuje również zmienną o nazwie $count i ustawia ją na zero. Zrobimy to w górę o jeden po każdej pętli.

Uruchamianie pierwszej pętli

Moja pierwsza pętla wyświetli mój niestandardowy typ postu. Tak więc w pętli, dołączymy tag warunkowy, który sprawdzi, czy ten typ posta. Sprawdzi również, czy wartość $ count wynosi 0, a po uruchomieniu zwiększy tę wartość o 1, aby ponownie zatrzymać pętlę.

Oto kod:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Należy pamiętać, że obejmuje to get_post_type() funkcja do identyfikacji typu post i uruchom pętlę tylko wtedy, gdy jest książka a wartość count to 0. Potem na końcu, $count++ zwiększy wartość zmiennej $ count o 1.

Ostatnim elementem tej pętli jest rewind_posts(). Nie opuszczaj tego, bo zobaczysz, że pętle nie działają poprawnie, ponieważ pominą wszystkie posty innych typów postów, które zostały opublikowane po tym poście „książki”.

Uruchamianie drugiej pętli

Teraz druga pętla. Jest podobny do pierwszego: sprawdza wartość $ count i typ postu, ale także sprawdza kategorię.

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Zauważ, że sprawdzamy, czy wartość $count wynosi 1 przed uruchomieniem tej pętli, co będzie, jeśli pierwsza pętla została uruchomiona dla postu 'book’.

Uruchamianie trzeciej pętli

Trzecia pętla jest bardzo podobna do drugiej: sprawdza post w kategorii „Aktualności”, ale nie w kategorii „wordpress”, ponieważ już wyświetliliśmy najnowszy post w tej kategorii. Jeśli nie uwzględniłem tego czeku, ten sam post może być wyświetlany dwa razy.

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Uruchamianie czwartej pętli

Czwarta i ostatnia pętla wyprowadza stronę: dla mnie jest to moja strona zapisu do newslettera.

Oto kod:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Zauważ, że oprócz sprawdzania typu postu sprawdzam również ślimaka z post_name wartość.

Po czwartej pętli musimy zamknąć element section i gotowe.

Zawartość pętli-za pomocą części szablonu

Być może zauważyłeś, że w każdej pętli mam tę linię:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Spowoduje to wywołanie pliku include z zawartością mojej pętli. Użycie tego pliku oznacza, że muszę napisać ten kod tylko raz, a nie cztery razy.

Możesz być bardziej zaznajomiony z używaniem get_template_part() funkcja wywołania pętli. Powód, dla którego użyłem include (locate_template() ) zamiast tego, jest to, że można przekazać zmienną tam iz powrotem do części szablonu za pomocą tej funkcji, ale nie z get_template_part(). Więc musisz użyć funkcji, której użyłem.

Oto treść mojej części szablonu:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Rzućmy okiem na niektóre z bardziej zaawansowanych aspektów tego kodu:

  • Używam zmiennej o nazwie $title aby zdefiniować tytuł, który pojawi się nad postem w każdej pętli. Nie jest to związane z samym postem, ale z kategorią lub typem postu. Zamiast próbować pobierać je dynamicznie, po prostu przypisuję wartość do tej zmiennej w zależności od tego, jaka jest wartość $count.
  • Dla każdego posta. wartość $title będzie wyświetlany w h3 element, a następnie wyróżniony obraz, tytuł i fragment.
  • Zarówno polecany obraz, jak i tytuł działają jako link do posta lub strony.

Musisz utworzyć własną część szablonu dla zawartości pętli. Dostosuj go, aby działał tak, jak chcesz.

Oto moja lista postów na mojej stronie głównej:

posts displayed one on top of the other with featured image but no layout styling

Pojawiają się, ale nie wyglądają za dobrze. Dodajmy trochę stylizacji.

Stylizacja Postów

Dodajmy kilka klas do elementu article w każdej pętli, abyśmy mogli go wystylizować. Edytuj artykuł element w pliku include tak wygląda:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Teraz dodaj trochę stylizacji do arkusza stylów szablonu:

Ładowanie gist 93772b5f9a86936aebe4d03b530c3d89

Teraz zapisz to i odśwież swoją stronę. Oto moja z moją siatką postów:

Myślę, że zgodzisz się, że wygląda o wiele lepiej niż prosta lista postów i jest potężniejsza niż tylko lista postów z bloga. Daje mi to o wiele większą elastyczność.

Uruchomienie jednego zapytania dla wielu pętli przynosi korzyści kodowi i Witrynie

Użycie tej techniki lub własnej wersji, aby uruchomić wiele pętli podczas odpytywania bazy danych tylko raz, ma wiele zalet:

  • Oznacza to, że masz tylko jedno zapytanie do kodowania i aktualizowania, dzięki czemu kodowanie jest bardziej wydajne. Jest to jeszcze bardziej wydajne dzięki użyciu części szablonu.
  • Odpytywając bazę danych tylko raz, unikasz opóźnień i przyspieszasz czas ładowania strony.
  • Posiadanie strony, która szybko się ładuje, poprawi wrażenia użytkownika i pozycję w wyszukiwarkach.

Czego tu nie lubić? Wypróbuj tę technikę już dziś ze swoimi postami, kategoriami i niestandardowymi typami postów i zobacz, co możesz zrobić.

Jak można wykorzystać tę technikę na swojej stronie? Daj nam znać w komentarzach!

Tagi:

You May Also Like

Jak naprawić nieprawidłowy błąd JSON w WordPress (Przewodnik dla początkujących)

W artykule: Co powoduje błąd „nieprawidłowa odpowiedź JSON” w WordPress?1. Sprawdź adresy…

Jak zmienić kolor linku w WordPress (poradnik dla początkujących)

W artykule: Dlaczego Linki Są Ważne?Jak dodawać linki w postach i stronach…

WordPress Pingbacks & Trackbacks: Ultimate A-Z Guide

W artykule: Czym są Pingbacks i Trackbacks? Plus, dlaczego są ważneCzym Są…

Jak naprawić błąd krytyczny w WordPress (krok po kroku)

W artykule: Co To jest błąd krytyczny w WordPress?Co powoduje krytyczny błąd…