WordPress Snippet

ワードプレスをカスタマイズしよう

get_template_part()、get_template_part_{name} アクションフック

get_template_part()は、ワードプレスのテンプレートファイルでの頻出関数の一つです。

この関数は、チャイルドテーマ、親テーマの中から適切なテンプレートを表示してくれる便利な関数ですが、テンプレート探索機能だけではなく、関数内にセットされているアクションフックを使う事で、さらに使いやすい関数になるかもしれません。

functions.phpに書かれた変数の受け取り方法や、アクションフックを使った変数の受け渡し方法について 動作を確認してみようと思います。

  1. functions.phpに記述した変数をインクルードするテンプレートパートファイルで反映させる。
  2. アクションフックを使って、テンプレートパートファイルの出力を変更する。

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にホスティングされるテーマの場合、すべての変数、関数、クラス、定数にテーマスラッグのプレフィックスを付けることが推奨されています。

[emulsion_relate_posts]