Chociaż zwykle używałem include
lub require
samodzielnie, aby zaoszczędzić długoterminową obsługę kodu, zacząłem go używać, get_template_part
a locate_template
korzystanie z wbudowanych WordPressów jest zawsze najlepsze.
Moje pytanie jest pan powinien być w stanie przejść przez zmienne z wynikami albo get_template_part
albo locate_template
?
<?php
$var = get_option( 'my-custom-option' );
get_template_part( 'custom-template-part' );
?>
W powyższym kodzie $var
zostanie wydrukowany w szablonie niestandardowym, ale zmienna wydaje się nie działać. Czy coś pomijam, czy to oczekiwane zachowanie?
Przekonałem się, że nie przechodzą one w powyższej instancji lub podczas używania locate_template
<?php
locate_template( 'custom-template-part.php', true );
?>
źródło
locate_template()
to rzeczywiście robi włączenia, jeśli parametr jest ustawiony jakotrue
-as w pytaniu. (domyślnie jestfalse
, więc nie wklejaj wersji pytania do zaakceptowanej odpowiedzi.) Możesz również użyćset_query_var('var', $var);
i używać swojejget_template_part()
jak zwykle. Następnie masz również domyślne zmienne Worpdress dostępne w pliku szablonu, jak wspomniano @MathSmath.Ładne rozwiązanie znalezione w kodeksie
Jeśli więc zapętlasz niestandardowe posty, możesz to zrobić:
A w samym szablonie automatycznie otrzymasz
$my_post
.źródło
wc_get_template_part
w WooCommerce, który bez wątpienia rozszerza domyślną WP.Miałem też z tym problem (podczas próby uzyskania niestandardowego zapytania do pracy z częścią szablonu). Krótka odpowiedź brzmi: nie, część szablonu nie dziedziczy automatycznie zmiennych niestandardowych, tak jak zwykłe dołączanie.
Zarówno get_template_part (), jak i locate_template () ostatecznie używają funkcji load_template () do faktycznego załadowania pliku (przy użyciu wymagania). Ta funkcja globalizuje następujące zmienne:
$ posts, $ post, $ wp_did_header, $ wp_did_template_redirect, $ wp_query, $ wp_rewrite, $ wpdb, $ wp_version, $ wp, $ id, $ komentarz, $ user_ID
Jednak żadne inne zmienne nie wydają się być dostępne z wnętrza części szablonu. Wydaje mi się, że skoro rzeczywiste wymaganie jest zawinięte w funkcję, zakres zmienia się czy coś?
W każdym razie spróbuję zglobalizować wszelkie dodatkowe zmienne, które musisz przekazać, a następnie wywołać te globale z części szablonu.
źródło
Tylko dwa centy za przyszłe odniesienia, obejściem przynajmniej w Wordpress 3.5 jest dodanie zmiennej
$wp_query->query_vars
.Potrzebowałem mojej globalnej
_vk_errors
części szablonu i zrobiłem to$wp_query->query_vars['_vk_errors'] = $_vk_errors;
przed wywołaniemget_template_part()
.źródło
Jest moja prosta funkcja rozwiązywania zmiennych problemów. Robi to samo, co Wordpress w
get_template_part()
funkcji. Po prostu skopiuj i wklej dofunction.php
Przykład użycia w szablonie
W
content-heighlight.php
dostępnej zmiennej o nazwie$utm_source
i wartościfooter
źródło
Możesz po prostu owinąć get_template_part, zapisać obiekt modelu w globalnym var i wyczyścić go później. Oto jak sobie radziliśmy w naszych projektach:
functions.php
Zastosowanie w głównym szablonie:
Dostęp do dostarczonego modelu w części szablonu:
W ten sposób nie musisz kopiować i wklejać oryginalnej funkcji get_template_part do własnej funkcji, na wypadek gdyby jej implementacja mogła się później zmienić przez programistów WP.
źródło