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

Przewodnik: Zmodyfikuj globalne zapytanie WordPress

8

W niektórych przypadkach może zajść potrzeba zmodyfikowania globalnego zapytania o posty, które WordPress wykonuje na każdej odwiedzanej stronie – zarówno admin, jak i frontend. W tym przewodniku przyjrzymy się, którego haka użyć i jak zmienić argumenty zapytania według własnych upodobań.

Którego haka użyć?

Najpierw musisz wiedzieć, do którego hooka dodać swój kod. Potrzebujemy podpięcia, które dzieje się zaraz po tym, jak WordPress ustawi wszystkie argumenty, ale przed faktycznym uruchomieniem zapytania. Do tego używamy akcji pre_get_posts.

W tym haczyku otrzymujesz jeden parametr; czyli WP_Queryobiekt, za pomocą którego WordPress będzie później uruchamiał zapytanie. Wprowadzasz zmiany w obiekcie – ale nie musisz go zwracać, ponieważ WordPress uruchomi zapytanie ze zmodyfikowanym obiektem.

add_action('pre_get_posts', function($query) { // Add your code here });

Modyfikowanie zapytania najprawdopodobniej wymaga użycia pewnych tagów warunkowych w celu określenia przypadków, w których chcesz je zmienić. Na przykład możesz chcieć kierować zapytanie tylko na wyniki wyszukiwania lub widoki kategorii.

Tagi warunkowe

WordPress ma kilka tagów warunkowych, których możesz użyć do określenia przypadków, w których chcesz dodać swój kod. Znacznik warunkowy to po prostu funkcja, która zwraca prawdę lub fałsz, w zależności od tego, w jakim stanie jest WordPress. Przykłady typowych tagów warunkowych służą is_admin()do sprawdzania, czy aktualnie jesteśmy w admin czy frontend, is_singular()czy jesteśmy na pojedynczym poście lub stronie w interfejsie, oraz is_search()jeśli jesteśmy na stronie wyników wyszukiwania.

Pamiętaj, że hook pre_get_postsjest uruchamiany zarówno dla administratora, jak i frontendu. Jeśli chcesz tylko wpłynąć na globalne zapytanie w interfejsie użytkownika, musisz owinąć swój kod wewnątrz znacznika warunkowego if-check is_admin().

Uwaga o tagach warunkowych wpre_get_posts

Tagi warunkowe są świetne i w ogóle, ale należy pamiętać o kilku rzeczach, korzystając z nich w pre_get_posts.

Najpierw musisz zapoznać się z tagiem is_main_query(). Akcja pre_get_postsjest faktycznie uruchamiana wiele razy przy każdym wczytaniu strony. Na przykład pre_get_postsjest uruchamiany podczas generowania każdego menu (w tym w widżetach). Aby zmodyfikować rzeczywiste zapytanie globalne, np. posty do archiwum kategorii lub wyniki wyszukiwania, należy kierować na „główne zapytanie" za pomocą is_main_query().

Po drugie, musisz być świadomy przypadków, w których musisz sprawdzić tagi warunkowe na dostarczonym obiekcie zamiast wywoływać funkcję „niezależnie”. Zwykle, gdy używasz tagów warunkowych, piszesz to tak:

if (is_main_query()) { // Do stuff }

Jednak podczas korzystania z pre_get_postsobiektu istnieje kilka tagów warunkowych, które należy zastosować do obiektu. Na przykład:

Należy zawsze zameldować is_main_query()się w obiekcie podanym w pre_get_posts. Przeczytaj dokumentację pre_get_posts, aby uzyskać więcej informacji.

Oto przykład sprawdzenia, czy nie jesteśmy w adminie, a czy jesteśmy przy głównym zapytaniu postu:

Zmiana lub dodanie argumentów

Ponieważ pracujemy z WP_Queryobiektem, możesz zapoznać się z dokumentacją WP_Query, aby dowiedzieć się, jak zbudować swoje argumenty, aby dostosować zapytanie posts. Pamiętaj, że argumenty są już wypełnione. W takim przypadku musisz dołączyć lub zmienić istniejące wartości. Lub usuń te, które chcesz usunąć.

Używasz set()funkcji na WP_Queryobiekcie, aby ustawić argumenty. Metoda przyjmuje dwa argumenty, klucz argumentu, a po drugie wartość. Na przykład ustawienie posts_per_pageargumentu wyglądałoby tak:

W przypadkach, w których chcesz dołączyć lub zmienić istniejący wcześniej argument, zwykle robisz to, najpierw zapisując istniejący argument w zmiennej. Możesz użyć do tego metody get(). Następnie modyfikujesz zmienną, dołączając lub scalając tablice lub cokolwiek. I na koniec używasz set()do zamiany zmodyfikowanej zmiennej z powrotem na obiekt zapytania. Polecam użyć var_dump()na obiekcie, aby zobaczyć, co zawiera, a jest to również dobry sposób na sprawdzenie, czy tagi warunkowe są poprawne.

Oto krótki przykład użycia get()(po prostu sprawdź, czy jest pusty), a jeśli tak, dodaj własne argumenty za pomocą set().

Uwaga dotycząca zapytania_podatkowego

WordPress ma oddzielne podklasy do obsługi części taksonomii (WP_Tax_Query) w ramach WP_Query. Jeśli musisz wykonać bardziej złożone modyfikacje zapytań taksonomicznych, pre_get_postsakcja może być zbyt wczesna. Niektóre wartości mogą być puste, ponieważ są wypełniane później. W takim przypadku może być lepiej, jeśli użyjesz akcji parse_tax_queryzamiast pre_get_posts. Przeczytaj dokumentację tego haka, aby sprawdzić, czy to jest dla Ciebie.

Wniosek

Argumenty, które dodajesz lub zmieniasz, zależą wyłącznie od tego, co chcesz zrobić, ale powinieneś mieć teraz pewien wgląd w strategie, aby zrozumieć zapytanie globalne. Jeśli chcesz uzyskać wgląd w WP_Queryobiekt i jak używać jego argumentów, mój post o tym, jak wyszukiwać posty, może być interesujący.

Ź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