WordPressのテーマ開発において、コードの再利用性と可読性を高めることは、開発効率を向上させるための重要な鍵となります。
サイトが大規模になるほどテンプレートファイルの記述は複雑になり、修正箇所の特定や管理が難しくなる傾向があります。
このような課題を解決するために欠かせないのが、テンプレートファイルを分割して呼び出すことができるget_template_part関数です。
この記事では、get_template_partの基本的な使い方から、実務で役立つ応用テクニックまで詳しく解説します。
テンプレートの構成を最適化し、メンテナンス性の高いテーマ制作を目指しましょう。
get_template_part関数とは
get_template_partは、WordPressテーマ内で特定のテンプレートパーツを読み込むための標準的な関数です。
例えば、ヘッダーやフッター以外の共通パーツである「パンくずリスト」や「SNSシェアボタン」などを別ファイルとして切り出す際に使用します。
PHPのincludeやrequireと似た役割を果たしますが、WordPress専用の関数として特別な仕組みを備えています。
最大のメリットは、子テーマでのオーバーライド(上書き)に自動的に対応している点です。
この関数を使用することで、テーマのコードをモジュール化し、一箇所を修正するだけでサイト全体の表示を更新できる効率的な管理が実現します。
get_template_partの基本構文と引数
まずは、関数の基本的な書き方を確認しましょう。
get_template_part( string $slug, string $name = null, array $args = array() );
この関数には、主に3つの引数を指定することができます。
引数の詳細
| 引数 | 型 | 説明 |
|---|---|---|
| $slug | string | テンプレートの一般的なスラッグ名(必須)。 |
| $name | string | 特定のテンプレートを指定するための名前(任意)。 |
| $args | array | テンプレートに渡す変数の配列(任意)。 |
もっとも単純な使い方は、第1引数の「$slug」のみを指定する方法です。
例えば、content.phpというファイルを読み込みたい場合は以下のように記述します。
// content.php を読み込む
get_template_part( 'content' );
特定のバリエーションを読み込む方法
第2引数の「$name」を使用すると、特定の状況に応じたテンプレートを動的に選択できます。
例えば、投稿タイプごとに表示を変えたい場合に便利です。
// content-archive.php を優先的に探し、なければ content.php を読み込む
get_template_part( 'content', 'archive' );
この場合、WordPressは「{slug}-{name}.php」の形式でファイルを探します。
もし指定されたファイルが見つからない場合は、自動的に「{slug}.php」をフォールバックとして読み込む仕組みになっています。
子テーマでの優先順位とファイル検索の仕組み
get_template_partが推奨される大きな理由の一つに、ファイル検索の優先順位があります。
この関数を実行すると、WordPressは以下の順番でファイルを探します。
- 子テーマの
{slug}-{name}.php - 親テーマの
{slug}-{name}.php - 子テーマの
{slug}.php - 親テーマの
{slug}.php
これにより、親テーマのファイルを直接書き換えることなく、子テーマ側に同名のファイルを配置するだけで表示をカスタマイズできます。
これは、将来的なテーマのアップデート対応を容易にするための極めて重要な仕様です。
テンプレートにデータを渡す応用的な使い方
WordPress 5.5以降、get_template_partの第3引数である$argsを使って、呼び出し先のテンプレートに変数を渡すことが可能になりました。
以前はグローバル変数を使用するなどの工夫が必要でしたが、現在はより安全で直感的にデータを共有できます。
値を渡す側の記述例
例えば、記事一覧の中でカードのデザインを変更するために、タイトルの色を指定して渡してみましょう。
// テンプレートに値を渡す
get_template_part( 'template-parts/content', 'card', array(
'text_color' => 'red',
'show_date' => true
) );
値を受け取る側の記述例(template-parts/content-card.php)
受け取り側のファイル内では、$argsという変数名で配列にアクセスできます。
/**
* $args を通じてデータを受け取る
*/
$text_color = $args['text_color'] ?? 'black';
$show_date = $args['show_date'] ?? false;
echo '<h2 style="color:' . esc_attr( $text_color ) . ';">' . get_the_title() . '</h2>';
if ( $show_date ) {
echo '<span>' . get_the_date() . '</span>';
}
この方法を活用すれば、共通のパーツを使い回しながら、文脈に応じて表示内容を柔軟に変更できるようになります。
実務で役立つディレクトリ構成のベストプラクティス
テンプレートパーツが増えてくると、テーマのルートディレクトリがファイルで溢れてしまいます。
管理効率を上げるために、「template-parts」といった専用のディレクトリを作成して整理するのが一般的です。
ディレクトリ内のファイルを指定する場合は、スラッグ名にパスを含めて記述します。
// 階層構造を指定して読み込む
get_template_part( 'template-parts/common/breadcrumb' );
このように整理することで、どのファイルがどのパーツを構成しているのかが一目で判断できるようになります。
include や get_header との違い
WordPressにはファイルを読み込むための方法が複数存在するため、使い分けに迷うことがあります。
代表的な関数との違いを整理しておきましょう。
include / require との違い
PHP標準のincludeなどは、絶対パスや相対パスを正確に指定する必要があります。
また、子テーマによる上書きを考慮してくれません。
テーマ開発においては、子テーマの仕組みを活かせる get_template_part を使うのが鉄則です。
get_header / get_footer / get_sidebar との違い
これらは特定の役割に特化した関数であり、内部的にlocate_templateを実行しています。
header.phpなどの決まったファイル名を探すためのショートカットのような存在です。
それ以外の汎用的なパーツにはすべてget_template_partを使用するという使い分けで問題ありません。
get_template_partを使用する際の注意点
便利な関数ですが、いくつか注意すべきポイントがあります。
まず、読み込むファイルに拡張子(.php)を含めないようにしてください。
// 誤った例:拡張子を入れてはいけない
get_template_part( 'content.php' );
// 正しい例
get_template_part( 'content' );
また、この関数は戻り値を返さない(値を返却しない)ため、読み込みの成否を条件分岐に使用することはできません。
ファイルが存在するかどうかを事前にチェックしたい場合は、locate_template関数を併用することを検討してください。
まとめ
get_template_partは、WordPressテーマの品質とメンテナンス性を劇的に向上させる強力なツールです。
テンプレートを適切な単位で分割することで、コードの重複を防ぎ、複雑なサイト設計をシンプルに保つことができます。
特に子テーマでのカスタマイズを考慮した開発や、最新の$args引数によるデータの受け渡しは、モダンなテーマ開発に欠かせません。
基本となるスラッグとネームの指定方法をマスターし、整理された美しいテーマ構造を作り上げましょう。
今回学んだ活用術を活かして、より効率的なWordPressサイト運用を実現してください。
