Czy ktoś mógłby mi wyjaśnić, jak działa ta funkcja? Wiem, co robi, ale kiedy patrzę na kod źródłowy w szablonie twenty_ten, nie rozumiem, jak wszystkie pętle są zbierane w pojedynczym pliku loop.php (też widziałem ten plik).

Jak więc na przykład wyodrębnić pewną wspólną część szablonu, a następnie ponownie wykorzystać ją w innych szablonach?

Komentarze

Odpowiedź

Tutaj jest kilka bardzo dobrych odpowiedzi wprowadzających.

Zasadniczo get_template_part() pozwala programistom motywów ustawić kolejność specyficznych plików szablonów. Pomyśl o tym podobnie do specyficzność, ponieważ dotyczy selektorów CSS. Projektując coś, chcesz zacząć od absolutnego minimum szczegółowości, aby można było łatwo nadpisać w częściach projektu, które wymagają indywidualnej uwagi.

Na przykład , zmieniasz styl bloga i tworzysz pętlę .php , który dobrze sprawdza się przy oznaczaniu postów. Ale planujesz z wyprzedzeniem i wywołujesz to później w plikach szablonów z dodatkowymi specyfikatorami kontekstu – powiedzmy na stronie indeksu wywołujesz get_template_part( "loop", "index" );, na pojedynczym szablonie wywołujesz get_template_part( "loop", "single" );, na stronach archiwum dzwonisz pod numer get_template_part( "loop", "archive" ); i tak dalej. To sprawia, że jest to bardzo łatwe, gdy zdecydujesz się oznaczyć pętlę na stronach archiwum inaczej niż na stronie głównej: po prostu utwórz loop-archive.php i będzie używany zamiast ogólnego loop.php .

Jednak magia get_template_part() tkwi w funkcji locate_template(), która sprawdza najpierw katalog motywu, a następnie katalog nadrzędny (jeśli jeden istnieje) dla pliku o nazwie. Jest to bardzo przydatne przy tworzeniu wtyczek. W jednej z moich wtyczek definiuję niestandardowy typ postu i utworzyłem plik szablonu pętli dla tego niestandardowego typu postu w moim katalogu wtyczek. Ale … chcę aby zezwolić motywom używającym mojej wtyczki na zastępowanie moich znaczników, jeśli zechcą. Tutaj locate_template() naprawdę działa cuda.

locate_template($template_names, $load = false, $require_once = true ) 

będzie szukał każdej z nazw w tablicy $ template_names w katalogu arkuszy stylów, a następnie w pliku temp późny katalog. Podanie „true” jako argumentu $ load oznacza, że będzie on wymagał pierwszego znalezionego pliku i zwróci pusty ciąg, jeśli nie zostanie znaleziony żaden plik szablonu. Mogę więc zrobić coś takiego w mojej wtyczce:

if ( "" === locate_template( "loop-mycustomposttype.php", true, false ) ) include( "loop-mycustomposttype.php" ); 

… co, miejmy nadzieję, powinno bardzo ułatwić programistom motywów dostosowanie mojej wtyczki poprzez dodanie plik o nazwie loop-mycustomposttype.php w swoim motywie.

Komentarze

  • Zastąp locate_template tym, proszę. include(locate_template( 'loop-mycustomposttype.php')) W ten sposób możliwe jest przekazywanie zmiennych. Znalazłem ' tutaj link . To ' jest niezwykle przydatne!
  • W związku z tym ' będzie trzeba to zmienić, jeśli również. W ten sposób if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
  • Dobra uwaga. Zgodnie z podanym przeze mnie wzorem połączenie require lub require_once (z locate_template) jest wewnątrz funkcja, więc nie ' nie ma dostępu do bieżącego zakresu.

Odpowiedź

Nie wszystkie pętle, główna pętla. 😉 Bez względu na to, czy spojrzysz na swoją stronę główną, kategorię, czy co wiesz, zawsze będziesz mieć główną pętlę. Zawartość tej głównej pętli jest określana przez zapytanie, które zostało uruchomione wcześniej Twój szablon w ogóle został wywołany.

Szablon loop.php po prostu przesuwa elementy w pętli i formatuje je. Zobacz dokumentację w Codex .

Jeśli spojrzysz na plik loop.php Twenty-Ten „, zobaczysz, że Dwadzieścia Dziesięć następnie dywersyfikuje wewnątrz ten pojedynczy plik szablonu.

get_template_part() po prostu ładuje część szablonu i przechodzi przez nią. Równie dobrze można wyodrębnić części loop.php do osobnych plików i zastąp je wywołaniami get_template_part("loop", "category") itd.

Lub możesz mieć szablon części dla każdego pojedynczego posta w pętli i niech Twój loop.php wywołuje tylko get_template_part("loop","post"); w ramach klauzuli while.... Wszystko zależy od Ciebie.

Odpowiedź

Z kodu get_template_part :

<?php get_template_part( "loop", "index" ); ?>

wykona procedurę PHP require () dla pierwszego istniejącego pliku …

Skutecznie będzie działać tak, jakbyś potrzebował innego pliku php.

Aktualizacja : Istnieje niewielka różnica w „wymaganiu” – jest on umieszczony wewnątrz funkcji, więc musisz global, jeśli chcesz przekazać jakiekolwiek zmienne z szablonu do części szablonu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *