2015
03/05

ファイル名に依存せずテンプレートファイルを好きな様に指定する

wp-template-hierarchy

WordPressのテンプレートは、どのテンプレートファイルをどんな時に使うかがファイル名によって決められています。

・個別記事の時はsingle.php
・アーカイブページはarchive.php
・カスタム投稿タイプが「item」のときの個別記事はsingle-item.php

のようにテンプレートファイルが読み込まれることはほとんどの方がご存知だと思います。WordPressのテンプレートを作成するときは真っ先に覚えましょうと言われることが多いですね。

テンプレート階層 – WordPress Codex 日本語版

しかし「個別記事はstandalone.phpという名前にしたいなぁ…」とか、「ユーザーエージェントがスマホでアーカイブページの時にはarchive-sp.phpを使いたいなぁ…」など、ファイル名だけでは対応しきれないケースも往々にしてあります。

そのような場合に、読み込むテンプレートを自分の好きなように指定することができるフィルターフックについて調べました。

ADs

読み込むテンプレートファイルを好き勝手に指定するフィルターフック

テンプレートを読み込む際、その読み込むテンプレートに応じて以下のようなフィルターフックが適用されます。

index_template
404_template
archive_template
author_template
category_template
tag_template
taxonomy_template
date_template
home_template
front_page_template
page_template
paged_template
search_template
single_template
text_template, plain_template, text_plain_template (すべての MIME タイプ)
attachment_template
comments_popup

フック名が「ファイル名_template」となっているので、どのテンプレートを読み込むときに適用されるフィルターフックかはすぐに判断できると思います。

実践的な使用例

上記フィルターフックはファイル名を返すことで、その返したファイルをテンプレートとして利用します。
具体的には以下のような使い方になります。

カスタム投稿タイプが「item」でカスタムタクソノミーが「area」のときのアーカイブページは「archive-item.php」を使う

検索結果とアーカイブテンプレートは同じものを使う

もしsearch.phpがあったとしてもフィルターフックで上書きされるのでarchive.phpが使われます。

など、複雑なif文を使うこともできるので細かな制御が可能となります。

実際に、どういう場面で使うべきか

既に誰かが作ったWordPressテーマがあり、その追加機能やレイアウト修正を承った時にお勧めです。

たとえば「運用中のWordPressサイトにカスタム投稿タイプと専用のレイアウトを追加してほしい」と言われた時、既存のarchive.phpやsingle.phpにif文を書くよりも、新しくarchive-new.phpを作成してfunctions.phpに数行追加して終わらせるほうがお手軽です。
既存のテーマが複雑な場合は、あちこちいじると事故るリスクも高いです。

フィルターフックを全パターン書くことで「トップページはstart.php」「カテゴリーはcat.php」「個別記事はonly.php」みたいに完全なオリジナルなテンプレート構成を取ることもできますが、やりすぎは自分でも把握できなくなるのであまりお勧めはしません。

参考になれば幸いです。

ADs

Post Comments

メールアドレスが公開されることはありません。

Comments

コメントはまだありません。