get tamplate part関数はget_header()、get_footer()、get_sidebar()と同じくWordPressのテンプレートをインクルードします。
ただget_template_partがget_header()、get_footer()、get_sidebar()と違う部分は、独自で作成したテンプレートファイルをインクルードすることができることです。
get_template_partの使い方
自作したテンプレートを他のテンプレートにインクルードする場合にはget_template_partに引数を指定して使用します。
get_template_partは 2つのパラメータを受け取ります。
<?php get_template_part( $slug ); ?>
初期値:なし
<?php get_template_part( $slug, $name ); ?>
初期値:なし
$slugはスラッグ
$nameは名前
インクルードする独自のテンプレートをget_template_part()関数のカッコの中に引数を書きます。
get_template_part()でテンプレートをインクルードするときの引数でスラッグは必須です。
そしてget_template_part()で独自のテンプレートをインクルードして、一致するテンプレートが見つからない場合には警告を出しません。
get_template_partで引数の書き方
get_template_part関数の書き方です。サンプルでcontent.phpのテンプレートがあるとします。
content.php
content.phpをインクルードしたいときの書き方
<?php get_template_part( ‘content’ ); ?>
get_template_partを書いて、右のカッコ内にインクルードする独自のテンプレートのスラッグを第一引数として指定します。(拡張子.phpは付けません)
content-page.php
テンプレートファイル名に「-」を付ける時があるかと思います。
その場合のテンプレートをインクルードしたいときの書き方です。
content-page.phpをインクルードしたいとき
<?php get_template_part( ‘content’, ‘page’ ); ?>
少しわかりにくいですが、スラッグと名前で指定して書くことで、第二引数が見つからなかったときに、第一引数で指定した「content.php」を読み込んで表示するために必要な引数の書き方です。
get_template_partをスラッグと名前を引数にする書き方、初見だと分かりづらくないですか?
以下からスラッグと名前を引数にして、独自のテンプレートをインクルードする場合を1つづつ説明していきます。
引数:スラッグでインクルードする
第一引数でスラッグ、第二引数で名前を指定してる理由が私には、ややこしく感じたので、先にスラッグを引数に使用した場合の使い方だけに絞って説明します。
get_template_part関数でインクルードする基本とするのがスラッグだけを引数に使用してインクルードするときです。
$slug
独自のテンプレートファイル名 content.php
$slug.php
$content.php
私の説明めちゃくちゃ下手ですが…おそらくスラッグだけで独自のテンプレートをインクルードする場合は、スラッグさえ理解していれば簡単かと思います。
私もスラッグだけの場合なら、初めから理解できました。
分かりにくくなるのが、次のスラッグと名前を引数にした場合です。
引数:スラッグと名前でインクルードする
第二引数(名前)をスラッグに追加して指定すると「スラッグ名-名前.php」の独自のテンプレートがあれば、そのファイルを読み込み、なければ「スラッグ名.php」を読み込みます。
<?php get_template_part( ‘content’, ‘page’ ); ?>
上記の例で独自のテンプレートをインクルードした場合「content-page.php」があれば、それを読み込み表示されます。「content-page.php」がなければ「content.php」がインクルードされます。
上記の説明が地味に大切です。
私もググって理解したことなんですけど、例えばget_template_part関数の引数に「content-page.php」と書いた場合にはインクルードできるけど、「content-page.php」が存在しなかったときに「content.php」を代わりに読み込まないらしいです。
<?php get_template_part( ‘content’, ‘page’ ); ?>
一方でget_template_part( ‘content’, ‘page’ )とスラッグと名前の引数にすれば、content-page.phpが存在しなかったときにcontent.phpをインクルードしてくれるので、このような書き方でインクルードする必要があります。
まぁcontent.phpがもともと存在していて、任意で使いたい独自のテンプレートでcontent-page.phpを作成するから当然と言えば当然なのですが。ちょい悩んだです。
サブフォルダでインクルードする
サブフォルダのインクルードもありました。
テーマディレクトリ内のサブフォルダでget_template_part関数を使用するためには、ただフォルダ名をスラッグの前に追加してあげます。
<?php get_template_part( ‘practice/content’, ‘page’ ); ?>
practiceというフォルダがテーマディレクトリにあるとしたら、contet-page.phpのテンプレートをpracticeサブフォルダ内にぶち込んでいる状態でcontet-page.phpをインクルードします。
サブフォルダも何気に簡単。
get_template_partでインクルードする例
get_template_part関数で独自のテンプレートをインクルードすると、テーマをコンパクトにできて少ない記述で別のテンプレートに再利用できます。
get_template_part関数はテンプレートの使い回しができるのが利点と言えます。
例として、作成する独自のphpファイルでget_template_part関数でインクルードするのはどんなときだろうのような例を2点ほど。
広告を独自のテンプレートにしてインクルード
私は会社運営のブログではないので実体験ではありませんが、会社で求人募集などの広告を表示させたい時期とかの場合、その時期しか必要ないと思います。
その時期の必要なときだけ広告用の独自のテンプレートをget_template_part関数で表示させたいテンプレートに関数を記述して使い回すことができます。
そして、さっきややこしかったスラッグと名前の場合
第二引数が見つからなかったときに第一引数で指定した「スラッグ.php」を読み込む特性を使って、広告を切り替えるときに第二引数を削除して第二引数のテンプレートに切り替えることもできるかと思います。
他には、使用してるWordPressテーマでは配置できない位置にアドセンス広告を配置するとき。
get_template_part関数でアドセンス広告用の独自のテンプレートを作成しておけば、あとはget_template_part関数の記述場所を変えるだけでなので楽です。
ループを独自のテンプレートにしてインクルード
ループを独自のテンプレートにして使いたいときに使い回す。というのも便利なようです。
私、ループの独自のテンプレート化はまだ作成したことがありません。
試しにループテンプレートを作成した中に、試しなので適当に投稿を取得してヘッダー下あたりにインクルードして見ましたが、感触は確かに記述が少なくなるし、使い回し効くのでかなり便利そうです。
でも試しにやっただけなので、記事抜粋をしてないために「長〜い」投稿を取得した結果は、ヘッダー下にメートル級の投稿を表示させてしまったという、しょぼいオチです。
get_template_part関数を使って少しでも便利なカスタマイズやサイト運営をしてみてください。