header.phpからテンプレートおよびその逆に変数を渡す


9

変数を定義しました-呼び出しましょう$header_var。これはheader.phpファイルに配置されています。この変数をテンプレートファイル(この場合、taxonomy.php)に渡したいのですが。

また$template_var、taxonomy.phpからheader.phpにを渡すなど、他の方法でも同じことができるようにしたいと思います。

ヘッダーが読み込まれると変数が宣言されなかったため、これは可能ですか?

私はグローバルを使用しようとしました$header_varが、運がありませんでした。

助言がありますか?

回答:


24

変数を定義しました。これを$ 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回しか実行されないため、関数を複数回呼び出す場合のパフォーマンスの問題を心配する必要はありません。


2
できれば1000票を投じます。これはWPテンプレートドキュメントにあるはずです
Benn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.