get_template_part()関数とは?

WordPressで似たような処理を出力する際にテンプレート化して必要箇所で呼び出すととても便利です。ソースコードの保守性もあがるので積極的に利用したい機能、そう、それがget_template_part()関数。

関数の基本構造は以下の通り。

get_template_part( string $slug, string|null $name = null, array $args = [] ): void|false

引数は必須パラメータが1つとオプションが2つ。戻り値はテンプレートの存在チェックで、テンプレートがあればtrueなければfalseが返ってきます。(あること前提な気がするので、僕は存在チェックは無駄な処理だと感じでしまいます)

get_template_part()関数の基本

例えば、テーマディレクトリ下にtemplate-partsという名前のディレクトリを作成し、その中にblock.phpという名前のテンプレートにするファイルを作成します。その場合、以下のように呼び出します。

get_template_part( 'template-parts/block' );

これだけで読み込んでくれます。簡単。特徴はファイル名を指定する際に拡張子(.php)は要らないということ。まぁ、PHPのファイルを読み込む関数なんだからそりゃそうか。

get_template_part()関数の第2引数の役割

先程のディレクトリにblock-post.phpblock-category.phpという名前のテンプレートファイルを作成します。投稿の情報を出力するブロックテンプレートとカテゴリーの情報を出力するブロックテンプレートを名前で分けたかった。その場合、以下のように呼び出します。

get_template_part( 'template-parts/block', 'post' );
get_template_part( 'template-parts/block', 'category' );

これでOK。ハイフンが切れ目なので、ファイル名をわかりやすいハイフンつなぎにすることがポイント。

get_template_part()関数でテンプレートに引数を渡す

同じテンプレートとはいえ、引数の値によって出力内容を変えたいわけで。例えば、カテゴリーIDを引数にしてテンプレート側で出力するカテゴリー情報を変えるなど。

get_template_part( 'template-parts/block', 'category', [ 'id' => 4 ] );

get_template_part()関数の第3引数に連想配列で渡すことがポイント。
それで、テンプレート側では以下のように取得します。

echo $args[ 'id' ];

連想配列名$argsで取得できます。最初、これがわからずアワアワしていたのですが、get_template_part()関数のマニュアルに第3引数array $args = []って書いてあるのに。まだまだ修行が足りぬ。

できた!\(^o^)/
注意点としては、テンプレート側で$argsという名前の変数を自分で定義しないことかな。知らないと思わぬ動きをしてしまいそう。

参考サイト

Developer Resources: get_template_part()
https://developer.wordpress.org/reference/functions/get_template_part/