get_template_part()

任意のテンプレートファイルを読み込む

get_template_part() はテーマ内の任意のファイルを読み込む関数です。共通パーツを別ファイルにまとめて各テンプレートから呼び出す際に使います。

ヘッダーやフッターなど用途が決まっているファイルには専用の関数(get_header() など)が用意されていますが、それ以外の任意のファイルを読み込む場合にこの関数を使います。

構文とパラメーター

【構文】

PHP
get_template_part( $slug, $name = null, $args = array() )

【返り値】なし(void)

パラメーター

$slugstring必須
読み込むファイルのパス(拡張子「.php」は不要)
$namestring必須
【初期値】null ファイル名に付加するサフィックス
指定すると {$slug}-{$name}.php を読み込む
$argsarray任意
【初期値】array() 読み込み先のテンプレートに渡す値。
テンプレート内で $args として受け取る
WordPress 5.5以降

ファイルの指定方法

test-index.php や test-single.php といったハイフンで区切られたファイル名の場合は以下のような記述になります。

PHP
get_template_part('test', 'index'); // 'test-index.php'
get_template_part('template/test', 'single'); // 'template/test-single.php'

test-index.php であれば「test」が $slug 、ハイフンで区切られた後の「index」が $name に当てはまります。

$slug のみ指定

ファイルパスはテーマフォルダからの相対パスで指定します。

parts/card.php を読み込む
<?php get_template_part('parts/card'); ?>

$slug と $name を指定

parts/card-news.php を読み込む
<?php get_template_part('parts/card', 'news'); ?>

$name を指定すると {$slug}-{$name}.php というファイル名になります。同じ card パーツでもコンテンツの種類ごとにファイルを分けたい場合に便利です。

フォールバックの仕組み

$name に指定したファイルが存在しない場合は {$slug}.php が読み込まれます(フォールバック)。

PHP
<?php get_template_part('parts/card', 'news'); ?>

この場合、parts/card-news.php がなければ parts/card.php を読み込み、どちらもなければ何も読み込まれません。

フォールバックの仕組みを活かすことで、共通の card.php を用意しておきつつ、特定の種類だけ専用ファイルで上書きする構成が作れます。

get_template_part('test-index'); と記述しても test-index.php の読み込みはされますが、テンプレートファイルの種類ごとに分けておいた方が便利です。

テンプレートに値を渡す($args)

WordPress 5.5 から第三引数 $args が追加されました。読み込み先のテンプレートに値を渡すことができます。

基本的な使い方

呼び出し側
<?php
get_template_part('parts/card', 'news', [
    'title' => '最新のお知らせ',
    'limit' => 5,
]);
?>
読み込まれる側(parts/card-news.php)
<h2><?php echo esc_html($args['title']); ?></h2>

受け取る変数名は $args で固定です。呼び出し側の変数名に関わらず、読み込まれた側では常に $args という名前でアクセスします。

$args を使う前後の比較

$args が追加される前は、グローバル変数を使って値を引き渡す方法が一般的でした。

以前の書き方(グローバル変数)
// 呼び出し側
global $card_title;
$card_title = '最新のお知らせ';
get_template_part('parts/card');

// 読み込まれる側
global $card_title;
echo esc_html($card_title);

グローバル変数はどこからでも変更できるため、大きなプロジェクトでは意図しない上書きが起きるリスクがあります。$args を使うと値の受け渡しがその呼び出しのスコープに限定されるため、より安全です。

$name が不要なときの書き方

$name を省略して $args だけ渡したい場合は、第二引数に null を指定します。

PHP
<?php get_template_part('parts/card', null, ['type' => 'featured']); ?>

詳細・注意事項

読み込めるのはテーマフォルダ(または親テーマフォルダ)内のファイルのみで、プラグインフォルダのファイルは読み込めません。

ファイルが見つからない場合は何も出力されず、エラーにはなりません。

get_template_part() を使うと、子テーマでの上書きが可能になります(locate_template() を経由するため)

コード Reference 一覧へ