get_template_part()は、ワードプレスのテンプレートファイルでの頻出関数の一つです。
この関数は、チャイルドテーマ、親テーマの中から適切なテンプレートを表示してくれる便利な関数ですが、テンプレート探索機能だけではなく、関数内にセットされているアクションフックを使う事で、さらに使いやすい関数になるかもしれません。
functions.phpに書かれた変数の受け取り方法や、アクションフックを使った変数の受け渡し方法について 動作を確認してみようと思います。
- functions.phpに記述した変数をインクルードするテンプレートパートファイルで反映させる。
- アクションフックを使って、テンプレートパートファイルの出力を変更する。
template part file
test.php
<?php global $module, // アクションフックにセットした変数 $message_title, // アクションフックにセットした変数 $message_content, // アクションフックにセットした変数 $functions_php_var; //functions.phpの変数 printf( $module, $message_title, $message_content ); echo $functions_php_var;
get_template_part_test アクション
get_template_part_{name} アクションで、test.php 用のアクションhook get_template_part_test を使って、フィルターで出力をコントロールしてみましょう。
functions.php
$functions_php_var= '今日は、晴れ'; add_action('get_template_part_test','my_template_var', 10, 2 ); function my_template_var( $name, $slug ) { global $module,$message_title,$message_content; $time= ( int ) current_time( 'H' ); $module= '<div class="special-message"><h3 class="title">%1$s</h3><p>%2$s</p></div>'; if( 6 < $time && 22 > $time ) { $message_title= 'すまん、今 俺 腹減っているから'; $message_content= '動けないんだよ'; } else { $message_title= '...'; $message_content= '......'; } } get_template_part('test');
- functions.phpに直接記述された変数は、test.php側でglobal宣言をする必要があります。
- フィルタを使う場合には、テンプレートパートファイル( test.php )、アクションフック関数( my_template_var() )内 双方に、global宣言が必要です。
以下のように表示されます。
今日は、晴れ
<div class="special-message"><h3 class="title">すまん、今 俺 腹減っているから</h3><p>動けないんだよ</p></div> 今日は、晴れ
global変数を使う場合の留意事項
グローバル変数は、便利ですが注意しないと、ワードプレス本体の変数値を書き換えてしまう危険性があります。
実際に使用する場合は、テーマスラッグでプレフィックスを付けるなど、コンフリクトを防ぐことが重要です。
テーマが、raindropsなら $raindrops_message_title 等とする事でコンフリクトを回避します。
wordpress.orgにホスティングされるテーマの場合、すべての変数、関数、クラス、定数にテーマスラッグのプレフィックスを付けることが推奨されています。