Bir değişken tanımladım - header.php dosyasına yerleştirilen $ header_var diyelim. Bu değişken benim şablon dosyası (bu durumda taxonomy.php) geçirilmesini istiyorum.
global
hile yapmak çok tavsiye edilen bir yol değildir, ancak düzgün kullanırsanız çalışır: içinde değişken tanımlamak önüne koymayı header.php
ve yine daha önce de değişkeni almak taxonomy.php
(içerecek şekilde) olarak adlandırılan get_header (yaptıktan sonra 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'
Ben de taksonomy.php $ header.php bir $ template_var geçirerek gibi, başka bir şekilde aynı şeyi yapmak istiyorum. Üstbilgi yüklendikten sonra değişken bildirilmediğinden bu mümkün mü?
Sihir veya zaman makinesi değil PHP'dir: zaman kuralları evrenin geri kalanında olduğu gibi WordPress için geçerlidir .
Yani, hayır, bir değişkeni zamanda geri geçiremezsiniz, ancak genellikle şablonlarda header.php
arayarak dahil edersiniz, get_header()
bu nedenle bu işlevi çağırmadan önce bir değişken ayarlarsanız , global hile de çalışır:
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
Ancak değişkenleri header.php
ve şablonlarda paylaşmanız gerekiyorsa , yapılacak en iyi şey değişkenleri başlıkta veya şablonlarda bildirmemek, ancak değişkenlerin ne zaman bildirilmesi gerektiğini kontrol etmek functions.php
için eylem kancalarını kullanmaktır .
Yararlı bir kanca, 'template_redirect'
geçerli sorguya erişiminizin olduğu yerdir ve daha önce tetiklenir header.php
ve şablonlar yüklenir.
Zor bir örnek:
// 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'
Önceki kodda, static
anahtar kelime sayesinde, get_my_shared_vars
değişkenleri ayarlamak için kullanılan işlevdeki tüm kodlar yalnızca bir kez çalışır, bu nedenle işlevi bir kereden fazla çağırırsanız performans sorunları hakkında endişelenmenize gerek yoktur.