( ) WordPress

get_template_part()で呼び出したテンプレートに変数を渡す方法

WordPress のget_template_part()は、PHP の include などと違って呼び出し側で定義した変数を参照することができません。そのため、グローバル変数である$wp_queryに値を渡してそこから参照できるようにします。

今回は例として、example.phpというテンプレートを呼び出し、その中から呼び出し側にある変数を参照できるようにします。

呼び出し側

// 変数をセットする
set_query_var('example_variable', 'てきとうな文字');

// テンプレート読み込み
get_template_part('example');

set_query_var()

set_query_var()で、グローバル変数$wp_query->query_varsの配列に値を追加することができます。ここでは'てきとうな文字'という文字列をセットしていますが、配列や数値など他の型も渡せます。

※注意点として、query_varsにセットされているキー名被らないキー名を使います。下記を参照するか、var_dump($wp_query->query_vars)を確認してください。

https://wpdocs.osdn.jp/WordPress_Query_Vars

テンプレート側

// 値を取得
$example_variable = get_query_var('example_variable');

// 出力
echo $example_variable;

get_query_var()

テンプレート(ここでは example.php )側では、get_query_var()を使って値を取得します。この例では先ほど定義したexample_variableを取得しているので、'てきとうな文字'が表示されるはずです。

直接参照する

詳細は追えていないのですが、get_query_var()を使わなくても、get_template_part()で呼び出したテンプレ側では、$wp_query->query_varsのが全て変数として定義されているようです。

先ほどの例だと、get_query_var()を使わなくても下記だけで呼び出せます。

echo $example_variable;

とはいえテンプレート側だけ見ると、定義していない変数を使っているように見えてわかりにくいので、get_query_vars()で取得を明示した方がわかりやすいかなという気がします。

注意点

あくまで$wp_queryの値を参照しているので、セットした後にメインクエリを書き換えると呼び出せません。

// 値をセット
set_query_var('hoge', 'てきとうな文字');

// メインクエリを書き換え
query_posts('post_type=post');

// example テンプレート呼び出し
// ※だが、先ほどセットした hoge は呼び出すことができない
get_template_part('example');

query_posts()では、グローバル変数$wp_queryを書き換えてしまうので、最初にセットしたhogeはなかったことになります。一番最初のメインクエリには、wp_reset_query()で戻すことができるので、その後でテンプレートを呼び出します。

// 値をセット
set_query_var('hoge', 'てきとうな文字');

// メインクエリを書き換え
query_posts('post_type=post');

... なんかいろんな処理 ...

// メインクエリを元に戻す
wp_reset_query();

// example テンプレート呼び出し
get_template_part('example');

関連記事

Leave a Reply