Zdefiniowałem zmienną - nazwijmy ją $ header_var, która jest umieszczana w pliku header.php. Chciałbym, aby ta zmienna została przekazana do mojego pliku szablonu (w tym przypadku taksonomia.php).
global
nie jest zalecanym sposobem wykonania tej sztuczki, ale działa, jeśli używasz jej poprawnie: włóż ją wcześniej, aby zdefiniować zmienną, header.php
i jeszcze raz przed pobraniem zmiennej taxonomy.php
(po wywołaniu get_header () w celu włączenia header.php
)
// in header.php
global $header_var;
$header_var = 'A value';
// in taxonomy.php
get_header();
global $header_var;
echo $header_var; // 'A value'
Chciałbym móc zrobić to samo na odwrót, na przykład przekazując $ template_var z mojego taxonomy.php do header.php. Czy to w ogóle możliwe, ponieważ zmienna nie została zadeklarowana po załadowaniu nagłówka?
To PHP, a nie magia ani wehikuł czasu: reguły czasu dotyczą WordPressa, podobnie jak reszty wszechświata .
Tak, nie, nie możesz cofnąć zmiennej w czasie, ale zwykle w szablonach dołączasz, header.php
wywołując, get_header()
więc jeśli ustawisz zmienną przed wywołaniem tej funkcji, sztuczka globalna również będzie działać:
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
Jeśli jednak musisz udostępniać zmienne header.php
i szablony, najlepiej nie zadeklarować ich w nagłówku ani w szablonach, ale functions.php
używając haków akcji do kontrolowania, kiedy zmienne muszą być deklarowane.
Przydatnym podpięciem jest miejsce, w 'template_redirect'
którym masz dostęp do bieżącego zapytania, które jest uruchamiane przed header.php
załadowaniem szablonów.
Szorstki przykład:
// in functions.php
add_action( 'template_redirect', 'get_my_shared_vars' );
function get_my_shared_vars() {
static $shared_vars = NULL;
if ( empty( $shared_vars ) ) {
$shared_vars = array( 'header_var' => 'An header value' );
if ( is_tax() || is_category() || is_tag() ) {
$shared_vars['taxonomy_var'] = 'A taxonomy value';
}
}
return $shared_vars;
}
// in header.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['header_var']; // 'An header value'
// in taxonomy.php
$shared_vars = get_my_shared_vars();
echo $shared_vars['taxonomy_var']; // 'A taxonomy value'
W poprzednim kodzie, dzięki static
słowu kluczowemu, cały kod w get_my_shared_vars
funkcji używanej do ustawiania zmiennych działa tylko raz, więc nie musisz się martwić o problemy z wydajnością, jeśli wywołujesz funkcję więcej niż raz.