W artykule:
Na WP_Query
klasa jest bardzo potężna. Pozwala tworzyć własne niestandardowe zapytania do uruchomienia w dowolnym miejscu w witrynie WordPress-w głównej treści, na pasku bocznym lub w dowolnym innym miejscu.
Jest to coś, czego często używam, albo w niestandardowych plikach szablonów, albo w obszarach poza treścią, takich jak pasek boczny lub stopka. I straciłem rachubę ile razy kodowałem niestandardowe zapytanie używając WP_Query
.
Ale to jest możliwe, aby uniknąć wszystkich tych przeróbek. Jeśli argumenty zapytania można filtrować, można napisać funkcję do zmiany argumentów i uruchomić inne zapytanie w różnych miejscach w witrynie. Oznacza to, że możesz napisać wtyczkę z niektórymi domyślnymi argumentami (lub rzeczywiście bez argumentów w ogóle), a następnie napisać funkcję w swoim motywie (lub w innej wtyczce), która poprawi te argumenty.
To nie zmieni pętli, która działa przy użyciu argumentów zapytania (chociaż jeśli chcesz, możesz również utworzyć inny filtr dla tego), ale to oznacza, że możesz kodować swoje WP_Query
instancja raz, a następnie dostosować go, gdy trzeba.
W tym poście pokażę Ci, jak napisać wtyczkę z instancją do filtrowania WP_Query
następnie napisz funkcję w pliku funkcji motywu, aby edytować argumenty.
Czego potrzebujesz
Aby śledzić ten post, musisz mieć dostęp do kilku rzeczy:
- Opracowanie lub testowanie instalacji WordPress z własnym motywem lub motywem potomnym
- Edytor kodu
Będziesz także potrzebował zrozumienia, jak pisać wtyczki, jak edytować plik funkcji i jak WP_Query
działa.
Gotowy? Więc zaczynajmy!
Pisanie wtyczki WP_Query
Zacznij od utworzenia wtyczki. Utwórz nowy folder dla wtyczki w swoim wp-content / wtyczki folderu, a następnie utwórz w nim pusty plik. Zawsze tworzę folder na wypadek, gdybym chciał dodać jakieś style, skrypty lub pliki dołączone do mojej wtyczki w późniejszym terminie.
Oto linie otwierające mój plugin:
Teraz dodajmy WP_Query
funkcja. Zacznę od dodania $args
zmienna, ale pozostaw ją pustą:
Następnie dodajemy pętlę:
Oto pełna funkcja:
Mamy teraz dość standardowe zapytanie i pętlę. Spowoduje to uruchomienie zapytania opartego na argumentach (które są obecnie puste), a następnie wyprowadzi nagłówek, a następnie listę elementów pobranych z linkami do nich. Może być używany do wyświetlania listy postów za pomocą kategorii, taksonomii, typów postów lub czegokolwiek innego jako argumentów.
W tej chwili jednak nic nie wyświetli, ponieważ te argumenty są puste. Dodajmy kilka argumentów, ale zawińmy je w filtr.
Dodawanie Filtrowalnych Argumentów
Weź $args
sekcja Twojego kodu i edytuj go, aby dodać kilka argumentów.
Dodam tylko argument za posts_per_page
, aby ograniczyć liczbę postów wyjściowych. Nie będę dodawać żadnych innych argumentów: w ten sposób zostanie wyświetlonych pięć ostatnich postów. Jeśli chcesz, możesz dodać kilka różnych argumentów.
Jak na razie tak prosto. Teraz Załóżmy te argumenty w filtrze. Oto kod:
To zawija nasz pojedynczy argument w filtr o nazwie wpmu_filtrable_query
, które można następnie podłączyć z innej wtyczki lub z motywu, aby zmienić te argumenty.
Skoro już przy tym jesteśmy, dodajmy filtr do tego nagłówka wewnątrz pętli, ponieważ jest to trochę ogólne.
Edytuj pętlę, aby zawierała filtr:
I to wszystko. Jeśli nie zdecydujesz się dodać więcej filtrów do pętli, wtyczka jest gotowa.
Korzystanie z filtra w motywie
Następnym krokiem jest napisanie kilku funkcji w swoim motywie.
Pierwszy zadzwoni do wpmu_filtrable_query
Hook akcji i wyprowadź go na swoją stronę. Można to nazwać na jeden z wielu sposobów.
Pierwszym z nich jest dołączenie go do Hooka akcji w motywie, za pomocą add_action
funkcja. Więc jeśli twój motyw miał hak o nazwie my_theme_sidebar_hook
, możesz wyprowadzić zapytanie na pasku bocznym w ten sposób:
Drugim jest kodowanie go bezpośrednio do pliku szablonu motywu. Wolę pracować z hookami tam, gdzie to możliwe, ponieważ dają mi one większą elastyczność, ale jeśli twój motyw nie ma żadnych hooków, może to być najlepsze podejście. Jeśli pracujesz z motywem innej firmy, nie edytuj bezpośrednio plików motywu – zamiast tego utwórz jego kopię w motywie podrzędnym.
Następnie w pliku szablonu motywu dodaj wywołanie do wpmu_filtrable_query
funkcja:
To po prostu uruchamia funkcję w miejscu w pliku szablonu, w którym ją umieszczasz.
Trzecią opcją jest utworzenie nowego pliku szablonu, takiego jak plik szablonu strony, który uruchomi to zapytanie zamiast domyślnego zapytania. W tym przypadku zrobiłbyś kopię strona.php z motywu lub motywu nadrzędnego i zastąp standardową pętlę wywołaniem funkcji, jak wyżej.
Tak właśnie dodajesz funkcję do motywu. Ale co powiesz na filtrowanie tych argumentów?
Filtrowanie argumentów w Twoim motywie
Ostatnim krokiem jest napisanie funkcji w pliku funkcji motywu, aby filtrować argumenty zapytania. Możesz również dodać drugą funkcję do filtrowania nagłówka, a także dowolne funkcje do korzystania z innych filtrów, które możesz dodać do pętli w swojej wtyczce.
Zauważ, że możesz to zrobić za pomocą wtyczki, jeśli chcesz, ale ponieważ już zakodowałeś funkcję w swoim motywie, myślę, że lepiej jest dodać ten kod do pliku funkcji.
Wyobraźmy sobie, że zarejestrowałeś typ postu o nazwie doohickey i zamiast tego chcesz to wyprowadzić. Ale zamiast wysyłać sześć postów, chcesz pokazać cztery.
W pliku functions potrzebujesz tego kodu:
Zastępuje to zawartość oryginalnego filtra nową zawartością funkcji. Zauważ, że jeśli chcesz zachować którykolwiek z argumentów w oryginalnym filtrze, musisz dodać je do tej funkcji, ponieważ nowy kod zastępuje stary kod i nie dodaje do niego.
Następnie dodajmy funkcję do edycji tekstu nagłówka:
Który wyświetli zawartość nowej funkcji zamiast < H3 > nagłówek</h3>
, który był wewnątrz filtra.
Możesz zmienić obie te funkcje według własnego uznania.
Filtrowanie WP_Query sprawia, że kod jest bardziej wydajny i oszczędza czas
Jeśli masz zamiar używać WP_Query
klasy w wielu witrynach i chcesz zaoszczędzić sobie kłopotu z kodowaniem WP_Query
w całości za każdym razem może to zaoszczędzić trochę pracy. W każdej witrynie, z której korzystasz WP_Query
, wystarczy dodać wywołanie funkcji i funkcję, aby dołączyć do haka filtra.
Jeśli chcesz, aby wtyczka była jeszcze bardziej elastyczna, możesz użyć pliku include dla pętli zamiast kodowania go bezpośrednio do wtyczki, a następnie dołączyć include_once()
wezwij filtr. W ten sposób możesz wywołać inny plik include, jeśli chcesz, i wypisać inną wersję pętli.
Tagi: