【WordPress】任意のテンプレートを読み込む関数「get_template_part()」解説
WordPressではヘッダーやフッター、サイドバーの場合は専用の関数でそれらを読み込むことが出来ます。
WEBサイト制作ではそれ以外のテンプレートパーツを作成する機会も多々あるかと思います。
今回の記事では別ファイルに切り分けたテンプレートパーツを各ページに読み込む方法をご紹介します。
この記事の目次を表示
基本的な使用方法
テーマ内にある任意のテンプレートパーツをpage.phpやindex.phpなどで読み込む場合、WordPressの独自関数として定義されているget_template_part()
関数を使用します。
get_template_part()関数は必ず引数を渡してどのテンプレートパーツを読み込むのか引数として指定する必要があります。基本的な使用方法は以下の通りです。
<?php get_template_part('banner'); ?>
上の例ではテーマ内にあるbanner.phpを読み込んでいます。
応用した使用方法
続いてget_template_part()
関数の少し応用した使用方法を見てみましょう。get_template_part()
関数は以下のように定義されていて引数を3つ渡すことが出来ます。
get_template_part( $slug, $name = null, $args = array() )
それぞれの引数は以下のようになっています。
- $slug:読み込むテンプレートパーツの名前を指定できます。
- $name:特定テンプレート名の名前を指定出来ます。
- $args:変数を配列としてテンプレートパーツに渡すことが出来ます。
複数のテンプレートパーツの切り分け
例えば以下のようなテンプレートパーツがテーマ内に存在したとします。
- banner.php
- banner-recruit.php
このようにふたつのファイルがあったとして、banner.phpを読み込みたい場合は以下のように記述してテンプレートパーツを読み込みます。
<?php get_template_part('banner'); ?>
bannerの部分が$slugに該当します。
続いて、banner-recruit.phpを読み込みたい場合は以下のように記述してテンプレートパーツを読み込みます。
<?php get_tempalte_part('banner','recruit');
上のファイルの例でいうとbanner-recrut.phpのrecruit部分が$nameに該当します。
専用ディレクトリにテンプレートパーツを格納
続いて、テンプレートパーツを専用ディレクトリに格納するやり方をご紹介します。
サイトの規模が大きかったり、共通となるデザインが多い場合、テンプレートパーツがどんどん増えていくことがあるかもしれません。
そのような時、テーマ内のディレクトリ直下に全てのテンプレートパーツを置いておくと煩雑な印象になってしまいます。
そこでテンプレートパーツの数が多くなる場合は専用のディレクトリにテンプレートパーツを格納する方がテーマ内もスッキリしてファイルの管理がしやすくなります。
今回はpartsディレクトリにテンプレートパーツを格納した場合を想定してご紹介します。
早速専用ディレクトリに格納したテンプレートパーツを読み込む方法は以下の通りです。
<?php get_template_part('parts/banner.php); ?>
このように記述することでpartsディレクトリに格納してあるbanner.phpを呼び出すことが出来ます。第一引数はファイル名だけでなくディレクトリも含めて指定することが出来ます。
テンプレートパーツに引数を渡す
仕様やカスタマイズ内容によってはテンプレートパーツに引数を渡したい場合もあるかもしれません。
この場合、以下のように引数を指定することでテンプレートパーツに引数を渡すことが出来ます。
テンプレートパーツを読み込む側は以下のように記述し引数を渡します。
<?php
$args = [
'name' => 'site-name',
];
get_template_part('','', $args);
?>
テンプレートパーツ側では以下のように記述し受け取った引数を表示します。
<?php echo $args['name']; ?>
この機能がWordPress5.5から追加され、開発やカスタマイズが格段に行いやすくなりました。
まとめ
今回の記事ではWordPressで任意のテンプレートパーツを読み込む方法をご紹介しました。WordPressでWEB制作をする場合、必ず使用する関数なので、どんな機能があり、どのように使用するのか予め把握しておきたいですね。