回答:
変数を定義しました。これを$ header_varと呼び、header.phpファイルに配置します。この変数をテンプレートファイル(この場合、taxonomy.php)に渡したいのですが。
global
トリックを行うにはあまりお勧めできない方法ですが、適切に使用すれば機能します。変数を定義する前に挿入し、変数を取得する前にheader.php
もう一度taxonomy.php
追加します(get_header()を呼び出して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'
私は、taxonomy.phpからheader.phpに$ template_varを渡すなど、他の方法でも同じことができるようにしたいと考えています。ヘッダーが読み込まれると変数が宣言されなかったため、これは可能ですか?
それはPHPであり、魔法でもタイムマシンでもありません。タイムルールは、他の世界と同様にWordPressにも適用されます。
したがって、いいえ、変数を過去に戻すことはできませんが、通常はテンプレートにをheader.php
呼び出しget_header()
て組み込みます。そのため、その関数を呼び出す前に変数を設定すると、グローバルトリックも機能します。
// in header.php
global $template_var;
echo $template_var; // 'A value'
// in taxonomy.php
global $template_var;
$template_var = 'A value'
get_header();
ただしheader.php
、テンプレートとテンプレートで変数を共有する必要がある場合は、ヘッダーやテンプレートで変数を宣言するのではなく、変数をいつ宣言する必要があるかを制御するアクションフックをfunctions.php
使用することをお勧めします。
への便利なフックは'template_redirect'
、現在のクエリにアクセスできheader.php
、テンプレートがロードされる前に起動される場所です。
大まかな例:
// 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'
以前のコードでは、static
キーワードのおかげで、get_my_shared_vars
変数の設定に使用される関数内のすべてのコードは1回しか実行されないため、関数を複数回呼び出す場合のパフォーマンスの問題を心配する必要はありません。