get_template_partに変数を渡す方法

WordPressでテンプレートを読み込んでくれる便利な関数の「get_template_part」ですが、実際使用していると
「これって変数渡したい時どうするの?」
なんてことも多いはずです。
そこで今回はget_template_partで変数を渡す方法について2通り紹介していきます。
その前にget_template_partについても少し触れようと思います。
get_template_partについて知っているという場合は下の方までスクロールしてください。
get_template_partの動き
get_template_partは再利用したい部分などを切り分けておいて、必要な個所で読み込むことができる関数です。
表示を伴わないのであれば、関数で十分ですが、HTMLを含んだ場合にはこちらの方が便利です。
get_template_part( string $slug, string $name = null, array $args = [] )
- 第一引数・・・テーマ直下からphpファイル名前(.php抜き)
- 第二引数・・・ケース別テンプレートの読み込み(後述詳細)
- 第三引数・・・テンプレート渡される引数(5.5~)
テーマでも子テーマでも使用することが可能です。
例を見てみましょう。
「templates」フォルダ内の「blog.php」を読み込む場合。
get_template_part( 'templates/blog' );// 子テーマ使用の場合のテンプレート優先順位wp-content/child-theme/templates/blog.phpwp-content/theme/templates/blog.php//子テーマ未使用wp-content/theme/templates/blog.php
上記のように子テーマで使用された場合は子テーマ内の「templates」フォルダが優先的に検索されます。
子テーマにない場合は親テーマの「templates」フォルダ内を検索します。
少し変えてもう一例。
「templates」フォルダ内の「blog-onecolumn.php」を読み込む場合。
先ほど同様にして読み込むことも可能なのですが、せっかくなので第二引数を使用しましょう。
get_template_part( 'templates/blog', 'onecolumn' );// 子テーマ使用の場合のテンプレート優先順位wp-content/child-theme/templates/blog-onecolumn.phpwp-content/theme/templates/blog-onecolumn.phpwp-content/child-theme/templates/blog.phpwp-content/theme/templates/blog.php//子テーマ未使用wp-content/theme/templates/blog-onecolumn.phpwp-content/theme/templates/blog.php
第二引数を設定すると第一引数に第二引数を「-」でつないだテンプレートが検索されるようになります。
さらに「-」でつないだテンプレートがない場合には第一引数のみのテンプレートが読み込まれるようになっています。(読み込みたくない場合は、第二引数を使用せずに第一引数にまとめればOKです。)
ちなみに返り値はテンプレートが見つかった場合はなし、見つからなかった場合は「false」となっています。
見つからなくてもエラーにならない優しい仕様になっています。
get_template_partで引数を受け取りたい場合
テンプレートファイルを小分けにして管理しやすかったり、使いまわしがしやすくなるのは良いのですが、「呼び出し元によって少し変えたい」などはよくある悩みです。
そこで引数を取る方法を紹介していきます。
一つ目の方法は「set_query_var」「get_query_var」を使用する方法です。
$title = 'テスト';set_query_var( 'title', $title );get_template_part( 'tempaltes/blog' );
$title = get_query_var( 'title' );echo $title // テスト
変数受け取れるのはいですが、わざわざセットしないといけないので面倒臭いですよね。
WordPressの5.5以前はこちらが使用されていましたし、get_template_partを紹介しているブログなどでもこちらが取り上げられていたりします。
WordPressのバージョンが5.5以上なら二つ目の方法を使用して渡す方が簡単です。
2つ目の方法は「get_template_part」の第3引数にセットする方法です。
$title = 'テスト';get_template_part( 'tempaltes/blog', null, [ 'title' => $title ] );
echo $args['title']; // テスト
シンプルで良いですね。
使用する際は「$args」で取り出してください。
上の例ではテキストを渡していますが、配列やオブジェクトなども可能です。
テンプレート側でも変数の宣言などなく使用することができます。
(テンプレート側で誤って上書きしないようにはする必要があります。)
まとめ
以上で、get_template_partの動き、そして変数の扱いについて理解できたのではないでしょうか。一つ目の方法ではなく、二つ目の方法を使用してスマートに受け渡しをしてください。
get_template_partはテーマ、子テーマ用の関数になっています。
プラグインで使用する場合はlocate_templateで確認してからincludeする必要があります。(また別記事で解説します。)