Załóżmy, że chcesz zrobić coś wyjątkowego ze sposobem, w jaki artykuły są pobierane i wyświetlane na określonej stronie Twojego strona internetowa. Być może chcesz mieć wiele zapytań, jedno dotyczące polecanych artykułów, drugie dotyczące najnowszych artykułów. A może chcesz wykluczyć określone kategorie z artykułów na Twój blog.

Niezależnie od celu decydujesz się na zbudowanie niestandardowego szablonu strony z zapytaniem, które działa nieco inaczej. Zanim jednak zaczniesz kodować, musisz podjąć decyzję: jakiego narzędzia do wysyłania zapytań WordPress użyć?

WordPress oferuje kilka różnych typów zapytań: WP_zapytanie, zapytanie_posty(), Get_posts (), Get_pages ()i Pre_stopów. W wielu przypadkach można użyć więcej niż jednego z tych narzędzi, aby osiągnąć pożądane rezultaty. Pozostaje jednak pytanie, jakiego z nich użyć?

W tym samouczku omówimy niektóre funkcje, z których można korzystać w WordPress.

WP_Query

« WP_Query jest klasą z tyłu (prawie) każde zapytanie WordPress. Kiedy ładujesz stronę lub post w WordPressie, obiekt „ WP_zapytanie », tworzone jest „$query”, które pobiera dane z odpowiednich postów lub stron. W rzeczywistości, " WP_Query jako silnik obsługujący najwięcej żądań w WordPress.

Używasz " WP_Query » nawet nie zdając sobie z tego sprawy. Po załadowaniu adresu URL rdzeń WordPress tworzy zapytanie do bazy danych z klasą „ WP_Query na podstawie adresu URL i zawartych w nim parametrów. Jeśli więc uzyskasz dostęp do strony z adresem URL takim jak „http://example.com/kategoria/wordpress”, WordPress utworzy obiekt „ WP_Query który lokalizuje wszystkie posty w kategorii „WordPress” i ładuje wszystkie posty.

« WP_Query zasila zapytania dotyczące standardowych postów i stron wbudowanych w WordPress i może być również używany do tworzenia niestandardowych zapytań. Odbywa się to za pomocą odrobiny „programowania obiektowego”. Wszystko, co musisz zrobić, to utworzyć nową zmienną i zadeklarować ją jako nową instancję „ WP_Query ", lubię to:

<?php
$args = tablica(
  // Zdefiniuj argumenty nowego zapytania
);

$myQuery = nowy WP_Query( $args );

Oczywiście musisz wtedy coś zrobić z wynikami zapytania. Jednak to coś wykracza poza zakres tego samouczka.

Jako programista WordPress prawdopodobnie będziesz używać „ WP_Query częściej niż jakakolwiek inna funkcja. Jest wszechstronny i mocny. Chociaż niektóre inne zapytania omówione w tym samouczku mogą zaoszczędzić czas, ogólnie rzecz biorąc, nie można się pomylić z „ WP_Query dla Twoich niestandardowych potrzeb w zakresie pisania zapytań.

Jedynym wyjątkiem od tej reguły jest sytuacja, gdy wystarczy przefiltrować wyniki standardowego zapytania. W tym przypadku, " Pre_stopów to narzędzie, którego powinieneś użyć. Przyjrzyjmy się zatem temu drugiemu.

Pre_stopów

« Pre_stopów to hak, a nie funkcja. Zamiast ponownie wysyłać zapytania do bazy danych, „ Pre_stopów umożliwia modyfikację obiektu „$query” przed wykonaniem zapytania do bazy danych, aby skutecznie filtrować wyniki zwracane przez standardowe zapytanie.

W większości przypadków „ Pre_stopów jest połączony ze znacznikami warunkowymi w celu filtrowania wyników zapytań w określonych sytuacjach. Możesz na przykład użyć „ Pre_stopów aby zwrócić inną liczbę artykułów na stronę główną serwisu. Zasadniczo, jeśli chcesz uruchomić standardowe zapytanie, ale w jakiś sposób je zmodyfikować, „ Pre_stopów będzie Twoim narzędziem pracy.

Jest kilka przypadków, w których „ Pre_stopów » nie działają i nie należy ich stosować. TO WordPress Codex sugeruje dwa takie przypadki:

Filtr Pre_stopów nie należy używać do modyfikowania zapytania w szablonie dla pojedynczej strony, ponieważ będzie to kolidować z właściwościami już ustawionymi przez „ parse_query() ".

Filtr Pre_stopów nie będzie działać, jeśli zostanie dodany do pliku szablonu, takiego jak „archive.php”, ponieważ pliki te są ładowane po wykonaniu głównego zapytania.

Dokąd nas to prowadzi? To znaczy, że " Pre_stopów to doskonały wybór do modyfikowania żądań ładowania postów w głównej pętli strony głównej, strony bloga i poszczególnych stron, takich jak „page.php” i „single.php”.

Czasami jednak filtrowanie standardowego zapytania nie wystarczy. Może chcesz użyć wielu zapytań WordPress lub manipulować wynikami w sposób, który „ Pre_stopów nie pozwole. W takim przypadku możesz przejść do „ WP_Query lub skorzystaj z innych dodatkowych opcji.

zapytanie_posty()

Jeśli szukasz Samouczki WordPress, znajdziesz wiele samouczków zalecających korzystanie z " zapytanie_posty() „. Jednak współczesne samouczki są powszechnie przeciwne takiemu zastosowaniu. Dlatego.

Funkcja zapytanie_posty() zastępuje główny obiekt zapytania „$query”, który jest tworzony i używany przez domyślną pętlę obsługiwaną przez rdzeń WordPress. Robi to poprzez utworzenie nowej instancji” WP_Query i przypisuje go do zmiennej globalnej „obiekt”.

Może to sugerować, że „ zapytanie_posty() jest naprawdę potężny i użyteczny. Jednak zabawa z podstawową pętlą oznacza, że ​​„ zapytanie_posty() ma poważne wady i dlatego należy go unikać.

Oficjalny Kodeks WordPressa podaje kilka powodów, dla których użycie „ zapytanie_posty() w zdecydowanej większości przypadków należy ich unikać. Do głównych podanych powodów należą:

Używać " zapytanie_posty() może znacznie spowolnić czas ładowania.

Ponieważ „ zapytanie_posty() zastępuje standardowe dane zapytań, może powodować szereg problemów z paginacją i siać spustoszenie na stronach korzystających z wielu zapytań.

Krótko mówiąc, użycie zapytanie_posty() to niebezpieczna propozycja. W rzeczywistości oficjalna dokumentacja rozpoczyna się z zastrzeżeniem: ta funkcja całkowicie zastąpi główne zapytanie i nie jest przeznaczona do użytku przez wtyczki ani motywy. Jego zbyt uproszczone podejście do modyfikowania głównego zapytania może być problematyczne i należy go unikać, gdy tylko jest to możliwe.

Innymi słowy, jeśli kodujesz motyw lub wtyczkę, a dokładnie to robi zdecydowana większość z nas, powinieneś unikać używania „ zapytanie_posty() „. Zamiast tego utwórz zupełnie nowy obiekt ” WP_Query albo użyj " Get_posts () "," Get_pages () „lub do” Pre_stopów ".

To z pewnością nie wszystko, istnieją inne funkcje, które rozważymy w przyszłym samouczku. Póki co życzę miłego kodowania.