WordPress.org

Języki: English • Français • Italiano * loop 日本本 Português do Brasil * Русский • 中文(简体) • 中文(繁體) * (Dodaj swój język)

pętla to kod PHP używany przez WordPress do wyświetlania postów. Korzystając z pętli, WordPress przetwarza każdy post, który ma być wyświetlany na bieżącej stronie i formatuje go zgodnie z tym, jak spełnia określone kryteria w tagach pętli. Każdy kod HTML lub PHP w pętli będzie przetwarzany na każdym poście.

gdy dokumentacja WordPress mówi „ten tag musi być w pętli”, na przykład dla konkretnych tagów szablonu lub wtyczek, tag zostanie powtórzony dla każdego postu. Na przykład pętla domyślnie wyświetla następujące informacje dla każdego postu:

  • Tytuł (the_title())
  • czas (the_time())
  • kategorie (The_category()).

możesz wyświetlić inne informacje o każdym wpisie za pomocą odpowiednich tagów szablonu lub (dla zaawansowanych użytkowników) poprzez dostęp do zmiennej $post, która jest ustawiana z informacjami o bieżącym wpisie podczas pracy pętli.

aby zapoznać się z pętlą dla początkujących, zobacz pętlę w akcji.

używając pętli

pętla powinna być umieszczona w indeksie motywu.php i w innych szablonach używanych do wyświetlania informacji o wpisach.

upewnij się, że wywołanie szablonu nagłówka znajduje się na górze szablonów Twojego motywu. Jeśli używasz pętli wewnątrz własnego projektu (a twój własny projekt nie jest szablonem), Ustaw WP_USE_THEMES na false:

<?php define( 'WP_USE_THEMES', false ); get_header(); ?>

pętla zaczyna się tutaj:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

i kończy się tutaj:

<?php endwhile; else : ?><p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p><?php endif; ?>

jest to użycie alternatywnej składni PHP dla struktur sterujących i może być również wyrażone jako:

<?php if ( have_posts() ) {while ( have_posts() ) {the_post(); //// Post Content here//} // end while} // end if?>

przykłady pętli

Styluj posty z jakiejś kategorii inaczej

ten przykład wyświetla każdy post z jego tytułem (który jest używany jako link do bezpośredniego linku), kategoriami i treścią. Pozwala również na to, aby posty w kategorii o Id kategorii '3′ były stylizowane inaczej. Aby to osiągnąć, używany jest znacznik szablonu in_category (). Przeczytaj uważnie komentarze, aby zobaczyć, co robi każda część kodu.

Uwaga: cały kod HTML musi być poza <?php ?> tagi. A kod PHP (nawet takie proste jak nawiasy klamrowe: } ) musi być wewnątrz <?php ?> tagi. Możesz uruchamiać i zatrzymywać bloki kodu PHP w celu przeplatania kodu HTML w instrukcjach if I else, jak pokazano w powyższym przykładzie.

Wyklucz posty z jakiejś kategorii

ten przykład pokazuje, jak ukryć określoną kategorię lub Kategorie przed wyświetlaniem. W takim przypadku posty z kategorii 3 i 8 są wykluczone. Przykład różni się od powyższego tym, że wprowadza zmiany do samego zapytania.

Uwaga: jeśli użyjesz tego przykładu na swojej stronie głównej, powinieneś użyć innego szablonu dla swoich archiwów kategorii; w przeciwnym razie WordPress wykluczy wszystkie posty w kategorii 3 i kategorii 8, nawet podczas przeglądania tego archiwum kategorii! Jeśli jednak chcesz użyć tego samego pliku szablonu, możesz tego uniknąć, używając znacznika is_home (), aby upewnić się, że posty z kategorii 3 i kategorii 8 będą wykluczone tylko ze strony głównej:

...<?php if ( is_home() ) {$query = new WP_Query( 'cat=-3,-8' );if ( $query->have_posts() ) : while ( $query->have_posts() ) : $query->the_post(); } else {...?>...

istnieją inne znaczniki warunkowe, których można użyć do kontrolowania wyjścia w zależności od tego, czy dany warunek jest prawdziwy w odniesieniu do żądanej strony.

orientacja obiektowa

pętle są kombinacją obiektowego i globalnego zachowania. Na początku jest to mylące.

dwie ważne zmienne globalne dla pętli to:

  • $wp_query, który jest obiektem klasy WP_Query, posiadającym wynik zapytania do bazy danych WP, wśród których $wp_query – > posts, tablica pojedynczych Wp_postów.
  • $post, który jest bieżącym obiektem klasy WP_Post

pamiętaj: wszystkie znaczniki szablonów domyślnie opierają się na zmiennej globalnej $post, a zmienna globalna $post jest ustawiana/modyfikowana przez the_post (), która pobiera swoje dane ze zmiennej globalnej $wp_query. $post jest również ustawiany / modyfikowany przez WP_Query:: the_post() jako używany w drugorzędnych pętlach.

wiele pętli

Ta sekcja dotyczy Zaawansowanego wykorzystania pętli. To trochę techniczne, ale nie daj się przestraszyć. Zaczniemy od prostego przykładu i zaczniemy od tego. Z odrobiną zdrowego rozsądku, cierpliwości i entuzjazmu, ty też możesz wykonać wiele pętli.

po pierwsze, dlaczego warto używać wielu pętli? Ogólnie rzecz biorąc, odpowiedź jest taka, że możesz chcieć zrobić coś z jedną grupą postów i zrobić coś innego dla innej grupy postów, ale wyświetl obie grupy na tej samej stronie. „Coś” może oznaczać prawie wszystko; ograniczają cię tylko umiejętności PHP i wyobraźnia.

przejdziemy do przykładów poniżej, ale najpierw powinieneś przeczytać o podstawach. Spójrz na podstawową pętlę. Składa się z:

<?php if ( have_posts() ) : ?><?php while ( have_posts() ) : the_post(); ?> <!-- do stuff ... --><?php endwhile; ?><?php endif; ?>

trochę na bok o do stuff: w tym przykładzie jest to po prostu symbol zastępczy dla kilku kodów, który określa, jak formatować i wyświetlać każdy post na stronie. Ten kod może się zmienić w zależności od tego, jak chcesz, aby twój WordPress wyglądał. Jeśli spojrzysz na indeks motywu Kubricka.PHP sekcja do stuff będzie wszystko poniżej:

<?php while ( have_posts() ) : the_post(); ?>

do góry:

<?php comments_popup_link( 'No Comments "', '1 Comment "', '% Comments "' ); ?>

Wyjaśnienie dla koderów: have_posts() i the_post () są wygodnymi opakowaniami wokół globalnego obiektu $wp_query, gdzie znajduje się cała akcja. $ Wp_query jest wywoływany w nagłówku bloga i fed argumenty zapytania przychodzące przez GET i PATH_INFO. $ Wp_query pobiera argumenty i buduje i wykonuje zapytanie DB, które skutkuje tablicą postów. Tablica ta jest przechowywana w obiekcie, a także zwracana z powrotem do nagłówka bloga, gdzie jest umieszczana w globalnej tablicy $posts (dla wstecznej kompatybilności ze starymi pętlami post).

gdy WordPress zakończy ładowanie nagłówka bloga i zejdzie do szablonu, docieramy do naszej pętli post. Have_posts() po prostu wywołuje $wp_query – > have_posts (), która sprawdza licznik pętli, aby sprawdzić, czy w tablicy postów zostały jakieś posty. A the_post () wywołuje $ wp_query->the_post (), która przesuwa licznik pętli i ustawia globalną zmienną $post, jak również wszystkie globalne dane post. Po wyczerpaniu pętli, have_posts () zwróci false i gotowe.

przykłady pętli

poniżej znajdują się trzy przykłady użycia wielu pętli. Kluczem do użycia wielu pętli jest to, że $wp_query może być wywołane tylko raz. W tym celu możliwe jest ponowne użycie zapytania przez wywołanie rewind_posts () lub utworzenie nowego obiektu zapytania. Jest to opisane w przykładzie 1. W przykładzie 2, użycie zmiennej do przechowywania wyników zapytania jest objęte. Wreszcie „wiele pętli w akcji” łączy kilka pomysłów, aby udokumentować jeden sposób używania wielu pętli do promowania postów z określonej kategorii na stronie głównej bloga.

wiele pętli przykład 1

aby ponownie przejść przez to samo zapytanie, wywołaj rewind_posts(). Spowoduje to zresetowanie licznika pętli i umożliwi wykonanie kolejnej pętli.

<?php rewind_posts(); ?> <?php while ( have_posts() ) : the_post(); ?><!-- Do stuff... --><?php endwhile; ?>

jeśli zakończyłeś posty w oryginalnym zapytaniu i chcesz użyć innego zapytania, możesz ponownie użyć obiektu $wp_query, wywołując query_posts (), a następnie zapętlając ponownie. Query_posts() wykona nowe zapytanie, zbuduje nową tablicę postów i zresetuje licznik pętli.

jeśli chcesz zachować oryginalne zapytanie, możesz utworzyć nowy obiekt zapytania.

wiele pętli przykład 2

inna wersja używania wielu pętli wymaga innego taktu, aby ominąć niemożność użycia have_posts() i the_post(). Aby rozwiązać ten problem, musisz zapisać oryginalne zapytanie w zmiennej, a następnie ponownie przypisać je do drugiej pętli. W ten sposób możesz korzystać ze wszystkich standardowych funkcji, które polegają na wszystkich globalach.

na przykład:

Uwaga: w PHP 5 obiekty są odwoływane za pomocą operatora „= clone” zamiast”=”, jak w PHP 4. Aby Przykład 2 działał w PHP 5, musisz użyć następującego kodu:

jednak ten drugi przykład nie działa w WordPress 2.1.

wiele pętli w akcji

najlepszym sposobem na zrozumienie, jak używać wielu pętli, jest pokazanie przykładu jej użycia. Być może najczęstszym zastosowaniem wielu pętli jest wyświetlanie dwóch (lub więcej) list postów na jednej stronie. Często robi się to, gdy webmaster chce zaprezentować nie tylko najnowszy post napisany, ale także posty z określonej kategorii.

pomijając wszystkie kwestie formatowania i CSS, Załóżmy, że chcemy mieć dwie listy postów. Jeden, który zawiera listę najnowszych postów (standardowe 10 ostatnio dodanych postów), a drugi, który zawierałby tylko jeden post z kategorii „polecane”. Posty w kategorii „polecane” powinny być pokazane jako pierwsze, a następnie drugie zestawienie postów (standard). Haczyk polega na tym, że żaden post nie powinien pojawić się w obu kategoriach.

Krok 1. Otrzymaj tylko jeden post z kategorii 'polecane’.

w języku angielskim powyższy kod brzmiałby:

Ustaw $my_query równy wynikowi zapytania wszystkich postów, w których kategoria ma nazwę featured i przy okazji, daj mi tylko jeden post. Ponadto Ustaw zmienną $do_not_duplicate równą numerowi ID zwracanego pojedynczego postu. Przypomnij sobie, że linia do stuff reprezentuje wszystkie opcje formatowania związane z pobranym postem.

zauważ, że w następnym kroku będziemy potrzebować wartości $do_not_duplicate, aby upewnić się, że ten sam post nie pojawi się na obu listach.

Krok 2. Druga pętla, Pobierz x najnowsze posty (z wyjątkiem jednego).

poniższy kod otrzymuje x ostatnich postów (zgodnie z definicją w preferencjach WordPress) zapisz ten już wyświetlony z pierwszej pętli i wyświetla je zgodnie z Do stuff.

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue;?><!-- Do stuff... --><?php endwhile; endif; ?>

w języku angielskim powyższy kod brzmiałby:

Get all posts, where a post equals $do_not_duplicate then just do nothing (continue), w przeciwnym razie wyświetli wszystkie pozostałe posty zgodnie z Do stuff. Ponadto zaktualizuj pamięć podręczną, aby wtyczki tagowania i słów kluczowych były przyjemne. Przypomnijmy, zmienna $do_not_duplicate zawiera ID już wyświetlanego posta.

wynik końcowy

oto jak wygląda końcowy fragment kodu bez żadnego formatowania:

wynikiem końcowym byłaby strona z dwiema listami. Pierwsza lista zawiera tylko jeden post-najnowszy post z kategorii 'funkcja’. Druga lista będzie zawierać x ostatnich postów (zgodnie z definicją w preferencjach WordPress) z wyjątkiem postu, który jest już pokazany na pierwszej liście. Tak więc, gdy Post funkcji zostanie zastąpiony nowym, poprzednia funkcja pojawi się w standardowej sekcji listy postów poniżej (w zależności od tego, ile postów wybierzesz do wyświetlenia i od częstotliwości postów). Ta technika (lub podobna) została wykorzystana przez wielu w połączeniu z wiedzą o hierarchii szablonów, aby stworzyć inny wygląd domu.php i index.php. Zobacz powiązane zasoby na dole tej strony.

uwaga dla wielu postów w pierwszej kategorii

jeśli posts_per_page = 2 lub więcej, będziesz musiał nieco zmienić kod. Zmienna $do_not_duplicate musi zostać zmieniona na tablicę w przeciwieństwie do pojedynczej wartości. W przeciwnym razie zakończy się pierwsza pętla, a zmienna $do_not_duplicate będzie równa tylko id ostatniego posta. Spowoduje to zduplikowanie postów w drugiej pętli. Aby rozwiązać problem zamień

na

zauważ, że „posts_per_page” może być dowolną liczbą.To zmienia $do_not_duplicate na tablicę. Następnie zamień

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( $post->ID == $do_not_duplicate ) continue; ?>

na

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); if ( in_array( $post->ID, $do_not_duplicate ) ) continue; ?>

, gdzie kontynuujesz wzorzec dla tego, co posts_per_page jest równe (w tym przypadku 2).

Alternatywnie możesz przekazać całą tablicę $do_not_duplicate do $wp_query i zostaną zwrócone tylko wpisy spełniające Twoje kryteria:

<?php query_posts( array( 'post__not_in' => $do_not_duplicate ) );if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> 

zauważ, że zamiast łańcucha, parametr query był tablicą asocjacyjną ustawiającą opcję post _ _ not _ in.

zagnieżdżone pętle

zagnieżdżone pętle oznaczają, że uruchamiasz drugą pętlę przed zakończeniem pierwszej. Może to być przydatne do wyświetlenia listy postów z krótkim kodem na przykład.

$my_query = new WP_Query( 'cat=3' );if ( $my_query->have_posts() ) { while ( $my_query->have_posts() ) { $my_query->the_post();the_content();}}wp_reset_postdata();

jest konieczne zresetowanie danych pętli głównej po zagnieżdżonej pętli, aby niektóre zmienne globalne ponownie utrzymały poprawne wartości.

Sources

sekcja o wielu pętlach jest połączeniem dyskusji Ryana Borena i Alexa Kinga na temat pętli na liście mailingowej hakerów. Przykład zagnieżdżonych pętli został zainspirowany inną dyskusją na liście dyskusyjnej i postem Nicolasa Kuttlera.

zasoby

  • WordPress WP_Query Generator
  • Getting Into The Loop – (slajdy) wprowadzenie do tego, jak wtyczki i motywy mogą modyfikować pętlę
  • WordPress Custom Loop
  • WordPress WP_Query Loop Generator

powiązane

więcej o pętli

  • artykuł: pętla w akcji
  • artykuł: znaczniki szablonów
  • artykuł: Korzystanie z pętli w plikach szablonów

Artykuły

  • artykuł: pętla – podstawowy przegląd wykorzystania zapytania w pętli WordPress.
  • artykuł: przegląd zapytań-Wyjaśnienie, jak określić, które zapytania generują WordPress.
  • artykuł: dostosowywanie zapytań za pomocą Hooka
  • artykuł: wyświetlanie artykułów zapytanie MYSQL za pomocą niestandardowego
  • artykuł: Tworzenie zaawansowanych zapytań na temat taksonomii
  • artykuł: Tworzenie niestandardowych zapytań za pomocą przesunięcia i paginacji

dokumentacja kodu

  • Klasa: WP_Query – szczegółowy przegląd klasy WP_Query
  • Class: WP_Comment_Query – Klasa dla zapytań związanych z komentarzami
  • Class: WP_User_Query-Klasa dla zapytań związanych z użytkownikami
  • Object: $wpdb – przegląd użycia obiektu $wpdb
  • funkcja: set_query_var()
  • funkcja: Get_query_var()
  • funkcja: query_posts ()-utwórz dodatkowe niestandardowe zapytanie
  • funkcja: get_post () – pobiera identyfikator elementu i zwraca rekordy w bazie danych dla tego artykułu
  • funkcja: get_posts() – wyspecjalizowana funkcja zwracająca tablicę pozycji
  • funkcja: get_pages() – wyspecjalizowana funkcja zwracająca tablicę stron
  • funkcja: have_posts() – warunek określający, czy zapytanie zwróciło artykuł
  • funkcja: the_post() – służy do automatycznego ustawiania pętli po zapytaniu
  • funkcja: rewind_posts() – czyści bieżącą pętlę
  • funkcja: setup_postdata() – ustawia dane dla pojedynczego wyniku zapytania w pętli
  • funkcja: wp_reset_postdata() – przywraca poprzednie zapytanie (zwykle po pętli w innej pętli)
  • funkcja: wp_reset_query()
  • funkcja: is_main_query() – zapewnia, że zapytanie, które jest zmieniane, jest tylko głównym zapytaniem
  • Hook akcji: pre_get_posts – Zmień zapytania WordPress przed ich wykonaniem
  • Hook akcji: the_post – modyfikuje obiekt Post po zapytaniu
  • Hook filtra: found_posts – zmienia wartość obiektu found_posts wp_query
ten artykuł jest oznaczony jako wymagający edycji. Możesz pomóc Codexowi, edytując go.


You might also like

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.