Ich habe eine Variable definiert - nennen wir sie $ header_var, die in der Datei header.php abgelegt wird. Ich möchte, dass diese Variable an meine Vorlagendatei übergeben wird (in diesem Fall taxonomy.php).
global
ist keine sehr empfohlene Methode, um den Trick auszuführen, aber es funktioniert, wenn Sie ihn richtig verwenden: Setzen Sie ihn vor, um die Variable zu definieren, header.php
und erneut, bevor Sie die Variable taxonomy.php
abrufen (nachdem Sie get_header () aufgerufen haben, um einzuschließen 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'
Ich möchte in der Lage sein, dasselbe umgekehrt zu tun, indem ich eine $ template_var von meiner taxonomy.php an header.php übergebe. Ist dies überhaupt möglich, da die Variable nach dem Laden des Headers nicht deklariert wurde?
Es ist PHP, weder Magie noch Zeitmaschine: Zeitregeln gelten für WordPress wie für den Rest des Universums .
Nein, Sie können eine Variable nicht in der Zeit zurückgeben, aber normalerweise schließen Sie sie in Vorlagen header.php
durch Aufrufen ein. get_header()
Wenn Sie also vor dem Aufrufen dieser Funktion eine Variable festlegen , funktioniert auch der globale Trick :
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
Wenn Sie jedoch Variablen in header.php
und Vorlagen freigeben müssen, deklarieren Sie diese am besten nicht im Header oder in Vorlagen, sondern functions.php
verwenden Sie Aktions-Hooks, um zu steuern, wann Variablen deklariert werden müssen.
Ein nützlicher Hook ist, 'template_redirect'
wenn Sie Zugriff auf die aktuelle Abfrage haben und diese ausgelöst wird, bevor header.php
Vorlagen geladen werden.
Ein grobes Beispiel:
// 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'
Im vorherigen Code wird dank des static
Schlüsselworts der gesamte Code in der get_my_shared_vars
Funktion, der zum Festlegen von Variablen verwendet wird, nur einmal ausgeführt, sodass Sie sich keine Gedanken über Leistungsprobleme machen müssen, wenn Sie die Funktion mehrmals aufrufen.