1. WordPress

別ファイルを読み込むget_template_part関数を使いこなそう【WordPress】

Share

今回は、別ファイルを読み込むget_template_part関数の使い方を解説します。

get_template_part関数は、WordPressのサイト制作で頻繁に使う関数なので、必ず使い方は覚えておきましょう。

get_template_part関数の引数

get_template_part関数には、3つの引数を入れることができます。

get_template_part( $slug, $name, $args );

$slugには、テーマルートディレクトリからのパス、$nameにはファイル名のハイフンの後に続く文字列(この説明は後述します)、$argsはテンプレートに配列を渡したい時に使います。

基本的な使い方

incフォルダにあるtemplate.phpファイルを読み込みたい場合、以下のように記述します。

<?php get_template_part( 'inc/template', ); ?>

この時、.php拡張子は不要です。

また、どのディレクトリからでもテーマルートからのパスが入ります。

第二引数の使い方

incフォルダに、template-post.phpというファイルがあったとします。

そうしたら、次のように取得ができます。

<?php get_template_part( 'inc/template', 'post' ); ?>

template-〇〇の〇〇を第二引数に記述します。

<?php get_template_part( 'inc/template-post' ); ?>

このように記述しても、template-post.phpファイルを取得することができますが、第二引数を使うことで以下のようなことができます。

<?php

$post_type = get_post_type();

get_template_part( 'inc/template', $post_type );

?>

template-page.phpやtemplate-post.phpがあった場合、第二引数を使うことでスッキリとした記述ができます。

第三引数(配列)の使い方

第三引数に引数を入れることで、読み込んだファイルに配列の変数を渡すことができます。

第二引数が不要な場合は、nullを入れます。

<?php

$var = array(
	'title' => 'Example',
	'description' => 'This page is Example.'
);

get_template_part( 'inc/template', null, $var );

?>

テンプレート側では、$args変数で第三引数の配列を取得できます。

template.php
<?php

$title = $args['title'];
$description = $args['description'];

?>
<h1><?php echo $title; ?></h1>
<p><?php echo $description ?></p>

template.phpに値を渡すことができました。

実際には、$args変数にキーが設定されているか確認した方がいいので、以下のように記述した方が安全です。

template.php
<?php

$title = isset( $args['title'] ) ? $args['title'] : '';
$description = isset( $args['description'] ) ? $args['description'] : '';

?>
<h1><?php echo $title; ?></h1>
<p><?php echo $description ?></p>

できればis_string関数で型の判定もしておきたいところですが、長くなるので省略します。

get_template_part関数で1ファイルの中身をスッキリさせよう

1つのファイルに長々とコードが書かれていると、とても見づらくなってしまいます。

get_template_part関数でファイルを分割しておくと、1ファイルのコード量が少なくなり見やすくなります。

get_template_part関数でパーツを使い回す

同じようなコードを何度も記述すると、手間が増えますし、メンテナンスが面倒になります。

例えば、category.phpやtag.phpのようなテンプレートには、同じようなコードが入ると思います。

category.php
<?php get_template_part( 'layout', 'archive' ); ?>

同じようなコードはテンプレートにして、get_template_partを使って使い回すのが便利です。