WP Codex mówi , aby to zrobić:
// You wish to make $my_var available to the template part at `content-part.php`
set_query_var( 'my_var', $my_var );
get_template_part( 'content', 'part' );
Ale jak mogę znaleźć się echo $my_var
w części szablonu? get_query_var($my_var)
nie działa dla mnie.
Widziałem mnóstwo rekomendacji do używania locate_template
zamiast tego. Czy to najlepsza droga?
variables
get-template-part
Florian
źródło
źródło
set_query_var
, aget_query_var
jednak to było za korzystanie z wartości z$args
tablicy, która jest przekazywana doWP_Query
. Może być pomocny dla innych osób, które zaczynają się tego uczyć.Odpowiedzi:
Ponieważ posty są konfigurowane przez
the_post()
(odpowiednio przezsetup_postdata()
) i dlatego są dostępne przez API (get_the_ID()
na przykład), załóżmy, że zapętlamy zestaw użytkowników (ponieważsetup_userdata()
wypełnia zmienne globalne aktualnie zalogowanego użytkownika i nie jest przydatne w tym zadaniu) i spróbuj wyświetlić metadane dla każdego użytkownika:Następnie w naszym
wpse-theme/template-parts/user-contact_methods.php
pliku musimy uzyskać dostęp do identyfikatora użytkownika:Otóż to.
Wyjaśnienie znajduje się dokładnie nad częścią, którą zacytowałeś w swoim pytaniu:
Natywna
extract()
funkcja PHP „wyodrębnia” zmienne (global $wp_query->query_vars
właściwość) i umieszcza każdą część w swojej zmiennej, która ma dokładnie taką samą nazwę jak klucz. Innymi słowy:źródło
hm_get_template_part
Funkcji przez humanmade jest bardzo dobry w tym i używam go cały czas.Ty dzwonisz
a następnie w szablonie używasz
aby zwrócić wartość. Buforuje i wszystko, choć możesz to wyjąć, jeśli chcesz.
Możesz nawet zwrócić renderowany szablon jako ciąg znaków, przekazując
'return' => true
go do tablicy klucz / wartość.źródło
Rozglądałem się i znalazłem różne odpowiedzi. Wydaje się, że na poziomie natywnym Wordpress pozwala na dostęp do zmiennych w częściach szablonu. Przekonałem się, że użycie parametru include w połączeniu z locate_template pozwoliło na dostęp do zakresu zmiennych w pliku.
źródło
include
nie przejdzie kontroli .Polecam przeczytać o funkcji PHP Extract ().
źródło
Ten sam problem natrafiłem na projekt, nad którym obecnie pracuję. Postanowiłem stworzyć własną małą wtyczkę, która pozwala bardziej jawnie przekazywać zmienne do get_template_part przy użyciu nowej funkcji.
Jeśli okaże się to przydatne, oto strona na GitHub: https://github.com/JolekPress/Get-Template-Part-With-Variables
A oto przykład, jak to by działało:
źródło
Lubię wtyczkę Pods i ich funkcję pods_view . Działa podobnie do
hm_get_template_part
funkcji wymienionej w odpowiedzi djb. Korzystam z dodatkowej funkcji (findTemplate
w poniższym kodzie), aby najpierw wyszukać plik szablonu w bieżącym motywie, a jeśli nie zostanie znaleziony, zwraca szablon o tej samej nazwie w/templates
folderze mojej wtyczki . To jest przybliżony pomysł tego, jak używampods_view
w mojej wtyczce:pods_view
obsługuje również buforowanie, ale nie potrzebowałem tego do moich celów. Więcej informacji na temat argumentów funkcji można znaleźć na stronach dokumentacji modułu Pods. Zobacz strony dotyczące pods_view i Częściowego buforowania stron oraz inteligentnych części szablonu z zasobnikami .źródło
Na podstawie odpowiedzi @djb przy użyciu kodu stworzonego przez człowieka.
Jest to lekka wersja get_template_part, która może akceptować argumenty. W ten sposób zmienne są skalowane lokalnie do tego szablonu. Nie trzeba mieć
global
,get_query_var
,set_query_var
.Na przykład w
cart.php
:W
apple.php
:źródło
Co powiesz na to?
Za pomocą
${$key}
można dodać zmienne do bieżącego zakresu funkcji. Działa dla mnie szybko i łatwo i nie przecieka ani nie jest przechowywana w globalnym zasięgu.źródło
Dla tych, którzy wyglądają na bardzo łatwy sposób na przekazywanie zmiennych, możesz zmienić funkcję na:
I wtedy będziesz mógł używać wszystkich zmiennych, które są zdefiniowane przed dołączeniem szablonu bez PASOWANIA, dodatkowo każdej dla szablonu.
Kredyty trafiają do: https://mekshq.com/passing-variables-via-get_template_part-wordpress/
źródło
To jest dokładne rozwiązanie i działało dobrze. https://developer.wordpress.org/reference/functions/set_query_var/
źródło