Melewati variabel dari header.php ke templat dan vice verca

9

Saya telah mendefinisikan variabel - sebut saja $header_var, yang ditempatkan di file header.php. Saya ingin variabel ini diteruskan ke file template saya (dalam hal ini taxonomy.php).

Juga saya ingin dapat melakukan hal yang sama sebaliknya, seperti melewati $template_vardari taxonomy.php saya ke header.php.

Apakah ini bahkan mungkin karena variabel tidak dideklarasikan setelah header dimuat?

Saya sudah mencoba menggunakan global $header_vartetapi tidak berhasil.

Ada saran?

pengguna54079
sumber

Jawaban:

24

Saya telah mendefinisikan variabel - sebut saja $ header_var, yang ditempatkan di file header.php. Saya ingin variabel ini diteruskan ke file template saya (dalam hal ini taxonomy.php).

globalbukan cara yang sangat disarankan untuk melakukan trik, tetapi ini berfungsi jika Anda menggunakannya dengan benar: letakkan sebelum mendefinisikan variabel header.php dan lagi sebelum mengambil variabel taxonomy.php(setelah memanggil get_header () untuk memasukkan 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'

Saya ingin dapat melakukan hal yang sama sebaliknya, seperti melewatkan $ template_var dari taxonomy.php saya ke header.php. Apakah ini bahkan mungkin karena variabel tidak dideklarasikan setelah header dimuat?

Ini PHP, bukan sihir atau mesin waktu: aturan waktu berlaku untuk WordPress seperti ke seluruh alam semesta .

Jadi, tidak, Anda tidak dapat melewatkan variabel kembali ke masa lalu, tetapi biasanya, dalam templat, Anda menyertakan header.phpdengan memanggil get_header()jadi jika Anda menetapkan variabel sebelum memanggil fungsi itu, trik global juga akan berfungsi:

// in header.php
global $template_var;
echo $template_var; // 'A value'

// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();

Namun jika Anda perlu berbagi variabel dalam header.phpdan templat, hal terbaik yang harus dilakukan adalah tidak mendeklarasikannya di header atau dalam templat, tetapi dalam functions.phpmenggunakan kait tindakan untuk mengontrol kapan variabel harus dideklarasikan.

Kait yang bermanfaat adalah 'template_redirect'tempat Anda memiliki akses ke permintaan saat ini dan diluncurkan sebelum header.phpdan template dimuat.

Contoh kasar:

// 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'

Dalam kode sebelumnya, berkat statickata kunci semua kode dalam get_my_shared_varsfungsi yang digunakan untuk mengatur variabel hanya berjalan sekali, jadi Anda tidak perlu khawatir tentang masalah kinerja jika memanggil fungsi lebih dari sekali.

gmazzap
sumber
2
Jika saya bisa, saya akan memilih 1000. Ini harus dalam dokumen WP template
Benn