以前の記事、「function.phpを分割して わかりやすくする」でも触れましたが今回はトップページや固定ページ、記事一覧ページなどでget template partを使ってテンプレートを読み込む方法についてです。
WordPressでのinclude関数「get template part()」
考え方としてはfunction.phpの時と同じで、(というかこちらが基本でしょうか)各テンプレートに記載する内容で、共通する部分はパーツとして分割して管理しましょうって事かと思います。その方がメンテナンスは楽ですものね。
またも登場!get template part()
get template part()は恐らくもう大抵のテーマファイルにでてきてますよね。たとえば下記のような感じ。
get_template_part( ‘template-parts/post/content’, get_post_format() );
もしくは
get_template_part( ‘template-parts/page/content’, ‘page’ );
さっそく関数リファレンスを見てみましょう。
get_template_partの基本
関数リファレンスによると、get_template_partは
1 |
<?php get_template_part( $slug ); ?> |
もしくは
1 |
<?php get_template_part( $slug, $name ); ?> |
となっています。
$slugは一般テンプレートのスラッグ名。
$nameは特定テンプレートの名前。
先ほどの例を見てみると
1 |
get_template_part( 'template-parts/post/content', get_post_format() ); |
( ‘template-parts/post/content’, get_post_format()
この部分ですね。
前の部分は「$slug」ですので、template-parts/post/contentはこの関数が書かれているテーマファイルがあるテーマフォルダの中の、template-partsフォルダの中のpostフォルダの中のcontent、
後ろの部分は「$name」ですので今回はget_post_format()が入ります。
簡単にするとcontent-get_post_format().phpを呼び出してって事です。
get_post_format()ってなに?
実は最初の頃はこれが謎でした。正直放置してました。
またまたget_post_format()を関数リファレンスで見てみると、
「投稿記事の投稿フォーマットを返します。」とあります。
投稿フォーマットとは
投稿画面のメニューに出てくるこれのことですね。
(無い場合はページ上にある表示オプションでチェックを入れると表示されます。ちなみに最新のデフォルトテーマTwenty Nineteenには無いです。)
get_post_format()関数はこれらのフォーマットの値を返してくださいってことなのですが、正直おそらくほとんどの場合が標準にされていると思います。そうなると、値は「標準」とか、「standard」とかが帰ってきそうですが、標準の場合は「false」が返ってきます。
先ほどの例をもうちょっと簡単にして見て見ます。
1 |
get_template_part( 'content', get_post_format() ); |
はい、これでこれが記入されているテーマと同じ階層にある
content-get_post_format().phpを呼び出してということになります。
それで、get_post_format()、フォーマットが標準ですとfalseですので、呼び出されているファイルは
content-false.phpとなります。
もし、content-false.phpが存在する場合はそのファイルを呼び出します。content-false.phpが無い場合、
1 |
<?php get_template_part( $slug ); ?> |
と同じ扱いになって
1 |
<?php get_template_part( 'content' ); ?> |
として見られ、content.phpが読み込まれるという仕組みです。
ちなみに、先ほどもちょこっと書きましたが、新しいテーマファイル、Twenty Nineteenには投稿フォーマットの設定がありませんでした。
テーマファイルを見てみると、いままでget_post_format()が使われていた部分は
1 |
get_template_part( 'template-parts/content/content' ); |
へと変更されています。
1 |
<?php get_template_part( 'content' ); ?> |
上記と同じ意味ですね。
正直こちらの方がわかりやすいと思います。
投稿フォーマットを使用しないのが前提であれば、こちらの方が良いかなぁとも思います。
content.php以外でご自身で別のファイルを用意するのであれば、
$slugは投稿であれば「content」、
固定ページであれば「page」などを使ってわかりやすくし、
$nameには特定のテンプレートの名前なので、
ここに例えばcustomとつけることにします。そうするとファイル名は[$slug]-[$name].phpなので、投稿ページ系ならば
content-custom.phpという名前になります。
このようにして名付けたファイルをテーマの中で呼び出すので、get_template_part関数は
1 |
<?php get_template_part( 'content', 'custom' ); ?> |
ということになります。
まぁ分かればどんな名前でもいいとはおもいますが……。
ちなみにもっとちゃんとフォルダに入れて管理しようって事になった場合だと、例えばフォルダ名「parts」にインクルードするcontent-custom.phpを入れるとするならば、
1 |
<?php get_template_part( 'parts/content', 'custom' ); ?> |
となります。
まとめ
最初はなんとなくとっつきにくいget_template_partなのですが、
慣れてくるとそれぞれのファイルに直接書いていくよりもずっと手間が省けます。逆に慣れないとどこに何が書いてあるのかが謎になってしまいますが……。
get_template_partが理解できると、例えば昔ならカテゴリーごとに少しでもレイアウトを変更したい場合は僕らのような文系頭だとそれぞれ一からcategory-1.phpとか作って大量になってたりしましたが、category.phpなどの中で条件分岐でその中身のレイアウトを変えるなんてことも出来ますし、変更は「parts」フォルダの中身だけだ!なんて風にすることも出来ますので、やっぱり管理が楽になると思います。