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.php
とblock-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/