Übergeben von Variablen von header.php an template und umgekehrt

9

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).

Außerdem möchte ich in der Lage sein, dasselbe umgekehrt zu tun, indem $template_varich ein von meiner taxonomy.php an header.php übergebe.

Ist dies überhaupt möglich, da die Variable nach dem Laden des Headers nicht deklariert wurde?

Ich habe versucht, global zu verwenden, $header_varaber ohne Glück.

Irgendwelche Vorschläge?

user54079
quelle

Antworten:

22

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).

globalist 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.phpabrufen (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.phpdurch 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.phpund Vorlagen freigeben müssen, deklarieren Sie diese am besten nicht im Header oder in Vorlagen, sondern functions.phpverwenden 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.phpVorlagen 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 staticSchlüsselworts der gesamte Code in der get_my_shared_varsFunktion, 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.

gmazzap
quelle
1
Wenn ich könnte, würde ich 1000 stimmen. Dies sollte in WP-Vorlagendokumenten sein
Benn