Felipe Elia Porady dla WordPress

WordPress jest CMS, a zatem Regulacja treści jest jednym z głównych filarów narzędzia. W tym poście zrozumiesz proces używany przez WP, aby wyszukać to, co ma być pokazane i jak można zmienić ten proces.

celem tego tekstu nie jest daleko zastąpić oficjalnych dokumentów, które zawsze powinny być wymagane. Jego celem jest umieścić w jednym miejscu, że początkujący powinni wiedzieć, zanim zaczniesz szukać więcej informacji.

query WordPress?

Query w języku angielskim oznacza zapytanie i jest ogólnie terminem używanym w odniesieniu do instrukcji w SQL (Structured Query Language, czyli Structured Query Language). W WordPressie nazywamy zapytania, prośby o materiały wykonane za pomocą klasy WP_Query.

WP_Query?

WP_Query to klasa PHP, dla wszystkich poszukujących treści w WordPressie. Zajmuje kilka parametrów w budowie, w tym post types, meta-danych, taksonomii i dat, a także z możliwością tworzenia niestandardowych parametrów.

Klasa WP_Query jest wyzwalany na wszystkich żądań wykonanych na swojej stronie, z wyjątkiem być może rodzaju szczególnie rzadkiego wyjątku adresów kontrolowanych przez wtyczki, które przerywają normalny przepływ. Za każdym razem nazywamy stronę, Post, termin taksonomii i etc. WordPress interpretuje adres zamówienia poprzez Rewrite API i tworzy WP_Query na podstawie argumentów do interpretacji.

Conditional tagi i WP_Query

tworzenie własnych pętli: WP_Query i get_posts()

kiedy odwołujemy się do pętli w WordPress, mówimy o iteracji (bez n) delegowanie post jest wybrany. Zazwyczaj mamy tylko jedną pętlę, która zawsze przypomina poniższy kod:

jeśli istnieją komunikaty, iteracja na nich. Pierwszy operator wewnątrz while the_post(), który mówi WordPress umieścić zmienne w następnym poście pętli w zmiennej globalnej $post, przy użyciu metody setup_postdata() Klasa WP_Query.

oto jak wygląda główna pętla, iteracja przez zestaw stanowisk, które WordPress znalazł podczas analizy wniosku, i szukać treści odpowiednich. Jeśli wymagany jest inny zestaw wiadomości (treść, zawartość określonej kategorii poza plikiem lub wiadomości opublikowane po tym, co jest wyświetlane, na przykład) możemy to zrobić na dwa sposoby: tworząc nowy obiekt WP_Query lub wywołując funkcję get_posts(). Obie robią to samo, ale wrócą do Ciebie różne rzeczy.

tworzenie pętli z WP_Query

prosty przykład, jak utworzyć pętlę z WP_Query:

zauważ, jak test i iteracji przez have_posts() jest nadal tam, podobnie jak the_post() , ale tym razem jako metoda zmiennej, którą tworzymy.

funkcja wp_reset_postdata() jest przeznaczony do przywrócenia zmiennej globalnej $post do poprzedniego stanu, na nasze zapytanie, to znaczy, że będzie umieścić z powrotem do globalnego $post Post global $wp_query, zobaczymy, że więcej do przodu.

tworzenie pętli z get_posts()

nawet na przykład za pomocą funkcji get_posts():

funkcja get_the_title () przyjmuje jako parametr inny Post, który znajduje się w zmiennej globalnej $post. Jeśli chcesz użyć funkcji the_content (), na przykład musisz zmienić globalną, w następujący sposób:

różnica między WP_Query i get_posts ()

główną różnicą jest to, do czego będziesz mieć dostęp. Za pomocą WP_Query masz dostęp do liczby stanowisk znalezionych w sumie ($query->found_posts) i numer strony ewentualnie ($query->max_num_pages), na przykład. Funkcja get_posts() z drugiej strony przytacza pewne argumenty już wypełnione, ponadto domyślnie jest nieco szybciej: przekazuje parametr no_found_rows true, zapobiegając kwerendy, jeśli ostateczna opcja jest SQL_CALC_FOUND_ROWS, a tym samym dystrybucję MySQL trzymać całkowitą liczbę wierszy znaleźć.

Globalne $ wp_query $ wp_the_query

w tym procesie interpretacji zapytanie i utworzenie obiektu klasy Wp_query WordPress tworzy dwie zmienne globalne: $wp_query, że prawdopodobnie już widział gdzieś, i $wp_the_query, który zawsze będzie kopia oryginału, który został poproszony przez użytkownika. Jeśli ktoś majstrować w $wp_query, przynajmniej możemy przywrócić go do normy z $wp_the_query. To jest dokładnie to, co funkcja wp_reset_query() robi.

dlaczego nie powinieneś używać query_posts () w plikach motywu?

oto ten strumień domyślnego adresu dns Twojej witryny, w panelu:

nie należy używać query_posts (), ponieważ został już nazwany wcześniej. Przywołać go ponownie podwoić przetwarzanie (prosząc WordPress, zrobić kolejny wniosek), a ponadto ignoruje potencjalnie co niektóre wtyczki są już w użyciu.

paginacja to kolejny przykład, w jaki sposób korzystanie z query_posts() może zakłócać pracę. Jeśli chcesz wyświetlić 15 postów na stronie w określonej kategorii i spróbować przywrócić domyślny zakres WP query_posts() dostaniesz sytuację, w której pierwszy element drugiej stronie powinno być 16, ale w rzeczywistości jest to tylko 11.

jak zmienić zapytanie? Użyj pre_get_posts

query_posts() nie jest zalecane przez jakiś czas. Stamtąd tutaj, wielu wyjaśnione dlaczego i zachęcać programistów do korzystania z akcji pre_get_posts, z podświetleniem specjalnie dla Leo głos, który nazwał akcja miłość preguetinho (wykorzystanie kalamburów z Preguetinho Lew dobroć upoważniony w komentarzu).

to proste. Aby usunąć stronicowania w poszukiwaniu, na przykład, można użyć następującego kodu w functions.php tematów:

kod przypisuje go do funkcji, hook pre_get_posts, a następnie funkcja zostanie wykonana za każdym razem żądanie jest przetwarzane. To musi mieć pewność, że będziemy pracować tylko w żądaniach wymaganych, a następnie sprawdzamy, czy naprawdę jesteśmy w części „front” (a więc nie atrapalhamos niczego panelu), jeśli jesteśmy w query stronie głównej, to znaczy, jeśli zapytanie jest pytanie $wp_the_query i jeśli to zapytanie będzie wyszukiwanie. Jeśli to wszystko jest prawdą, zmienił atrybut posts_per_page -1, co oznacza, że nie ma ograniczeń na stanowisku.

inny przykład: Usuń kategorię z listy postów na blogu

jeśli potrzebujesz, że wiele zmian, można połączyć wszystko w jednej funkcji:

wniosek



+