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).
global
bukan 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.php
dengan 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.php
dan templat, hal terbaik yang harus dilakukan adalah tidak mendeklarasikannya di header atau dalam templat, tetapi dalam functions.php
menggunakan 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.php
dan 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 static
kata kunci semua kode dalam get_my_shared_vars
fungsi yang digunakan untuk mengatur variabel hanya berjalan sekali, jadi Anda tidak perlu khawatir tentang masalah kinerja jika memanggil fungsi lebih dari sekali.