Header.php dosyasından şablona ve verca verca'ya değişken aktarma


9

Bir değişken tanımladım - $header_varheader.php dosyasına yerleştirilen diyelim . Bu değişken benim şablon dosyası (bu durumda taxonomy.php) geçirilmesini istiyorum.

Ayrıca $template_vartaksonomi.php'den header.php'ye geçmek gibi başka bir şekilde aynı şeyi yapmak istiyorum .

Üstbilgi yüklendikten sonra değişken bildirilmediğinden bu mümkün mü?

Global kullanmayı denedim $header_varama şanssız.

Herhangi bir öneri?

Yanıtlar:


24

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.

globalhile 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.phparayarak 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.phpve ş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.phpiçin eylem kancalarını kullanmaktır .

Yararlı bir kanca, 'template_redirect'geçerli sorguya erişiminizin olduğu yerdir ve daha önce tetiklenir header.phpve ş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, staticanahtar kelime sayesinde, get_my_shared_varsdeğ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.


2
Yapabilseydim 1000 oy verirdim. Bu WP şablon belgelerinde olmalı
Benn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.