WordPressでは、「header.php」、「footer.php」、「sidebar.php」など、あらかじめ用意されているテンプレートパーツがあります。

これらのテンプレートパーツをテーマの中で使う際、下記のように任意の箇所に記述することでテンプレートパーツを表示させることができます。

  • 「header.php」なら<?php get_header(); ?>
  • 「footerer.php」なら<?php get_footer(); ?>
  • 「sidebar.php」なら<?php get_sidebar(); ?>

…ここまでは初心者の方でもご存知の方が多いはず。
では、それ以外の任意のテンプレートパーツを扱いたい場合にはどうすればいいか?

そう。そんなときに使える便利な関数が[get_template_part();]です。

get_template_part();について

簡単に言えば、[get_tempalte_part();]は、引数で指定したテンプレートを、「header.php」や「sidebar.php」と同じように、テーマの中に読み込んでくれる関数です。

例えば、テーマの中で何度も使用する記述があり、それぞれの箇所をコピペで対応しているような場合。
新たに「sample.php」というファイルを作成して、その中に該当するコードを記述しておきます。
それから任意の場所で <?php get_template_part('sample'); ?>と記述して「sample.php」を読み込むようにします。
これでコピペの手間からも解放され、サイトの管理もより簡単になるという仕組み。

もちろん、この場合の「sample.php」の中身では普通にPHPを扱えるので、WordPressのループ処理も行えます。

[get_tempalte_part();]関数の仕様

<?php get_template_part( $slug, $name ); ?>
引数名 説明 デフォルト 必須
$slug テーマスラッグ名 なし
$name 特定テンプレート名 なし
  • $slugはテーマディレクトリからテンプレートファイルのパスを指定します。get_template_part()において$slugは必ず書く必要があります。
  • $nameは$slugに対して追加で名前があるときに指定します。

呼び出したいテンプレートの例

上の説明だとちょっとわかりづらいと思うのでどういう風にテンプレートファイルの名前を指定するのかをだします。インクルードしたいテンプレートファイルに以下のものがテーマディレクトリの直下にあるとします。

  • content.php
  • content-single.php

content.phpをインクルードしたい場合

content.phpの「content」がget_template_part()の $slug になります。なのでcontent.phpをインクルードしたいときは get_template_part('content');とすればOKです。

content-single.phpをインクルードしたい場合

content-single.phpの「content」が$slug、「single」が $name になります。なのでcontent-single.phpをインクルードしたいときはget_template_part('content', 'single');とすればOKです。


$slugについて

上の2つの例でいくとget_template_part()において別に$nameは必要なくねぇ!? と思う方もいるでしょう。content-single.phpの場合だと$slugと$nameは、ハイフンで区切ったテンプレートファイル名と同じだからです。

$slug-$name.php

ここで少し細かい説明をするとget_template_part()における$slugは テンプレートファイル名を引数としているのではありません 。テーマディレクトリからテンプレートファイルまでのパスを指定します。なのでテーマディレクトリからディレクトリを切ってその下にインクルードしたいテンプレートがある場合は以下のような形にすればいいです。

get_template_part('template/content');

またディレクトリを切ったテンプレートファイルと同じ階層のテンプレートファイルをインクルードしたい場合もテーマフォルダからの指定なので上と同じやり方になります。

get_template_part('template/content', 'aside');

$nameについて

$slugが複数あるときに$nameで区切っておくと便利なのでどんどん使ってOKです。

参考URL:関数リファレンス/get template part