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ą gromadzone w jednym loop.php (też widziałem ten plik).
Jak na przykład wyodrębnić pewną wspólną część szablonu, a następnie użyć go ponownie w innych szablonach?
get-template-part
Amit Erandole
źródło
źródło
Odpowiedzi:
Kilka bardzo dobrych wstępnych odpowiedzi tutaj.
Zasadniczo
get_template_part()
umożliwia twórcom motywów ustawienie kolejności specyficzności plików szablonów. Pomyśl o tym podobnie do specyficzności, ponieważ dotyczy selektorów CSS. Projektując coś, chcesz zacząć od absolutnego minimum specyficzności, aby można go było łatwo zastąpić w częściach projektu, które wymagają indywidualnej uwagi.Na przykład projektujesz bloga i tworzysz plik loop.php , który działa dobrze do oznaczania postów. Ale planujesz z wyprzedzeniem i wywołujesz go później w plikach szablonów z dodatkowymi specyfikacjami kontekstu - powiedzmy, na stronie indeksu, dzwonisz
get_template_part( 'loop', 'index' );
, na jednym szablonie, dzwoniszget_template_part( 'loop', 'single' );
, na stronach archiwum, dzwoniszget_template_part( 'loop', 'archive' );
i tak dalej. Ułatwia to późniejszą drogę, gdy zdecydujesz się oznaczyć pętlę na swoich stronach archiwalnych inaczej niż na stronie głównej: po prostu utwórz szablon loop-archive.php i będzie on używany zamiast ogólnej pętli.php .Ale magia
get_template_part()
tkwi w funkcjilocate_template()
, która najpierw sprawdza katalog motywów, a następnie katalog macierzysty (jeśli taki istnieje) dla pliku o nazwie. Jest to bardzo przydatne do tworzenia 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ę zezwolić, aby motywy korzystające z mojej wtyczki zastępowały znaczniki, jeśli tak wybiorą. To tamlocate_template()
naprawdę działa cuda.wyszuka każdą z nazw w tablicy $ template_names w katalogu styles styles, a następnie w katalogu szablonów. Przekazanie „true” jako argumentu $ load oznacza, że będzie wymagał pierwszego znalezionego pliku i zwróci pusty ciąg, jeśli nie zostanie znaleziony plik szablonu. Więc mogę zrobić coś takiego w mojej wtyczce:
... co, mam nadzieję, powinno ułatwić twórcom motywów dostosowanie mojej wtyczki poprzez dołączenie do motywu pliku o nazwie loop-mycustomposttype.php .
źródło
include(locate_template( 'loop-mycustomposttype.php'))
W ten sposób można przekazywać zmienne. Znalazłem ten link tutaj . To bardzo przydatne!if ( false === include(locate_template( 'loop-mycustomposttype.php')) )
require
lubrequire_once
(fromlocate_template
) jest wewnątrz funkcji, więc nie ma dostępu do bieżącego zakresu.Nie wszystkie pętle, główna pętla. ;-) Bez względu na to, czy spojrzysz na swoją stronę główną, kategorię czy też co, zawsze będziesz mieć główną pętlę. Zawartość tej głównej pętli zależy od zapytania, które zostało uruchomione przed wywołaniem szablonu w ogóle.
Szablon loop.php po prostu przesuwa się nad elementami w pętli i formatuje je. Zobacz dokumentację w Kodeksie .
Jeśli spojrzysz na plik loop.php Twenty-Ten, zobaczysz, że Twenty-Ten następnie różnicuje się w tym jednym pliku szablonu.
get_template_part()
po prostu ładuje część szablonu i przechodzi przez nią. Równie dobrze możesz wyodrębnić części pliku loop.php do osobnych plików i zastąpić jeget_template_part('loop', 'category')
wywołaniami a itd.Lub możesz mieć szablon części dla każdego pojedynczego postu w pętli, a pętla loop.php będzie wywoływać tylko
get_template_part('loop','post');
w ramachwhile...
klauzuli. Wszystko zależy od Ciebie.źródło
Z kodeksu get_template_part :
Tak skutecznie zadziała, jakbyś potrzebował innego pliku php.
Aktualizacja : Istnieje niewielka różnica w „wymaganiu” - jest ona zawinięta w funkcję, więc musisz
global
ją przekazać, jeśli chcesz przekazać zmienne z szablonu do części szablonu.źródło