【WordPress】タグごとに異なるテンプレートを適用する方法

【WordPress】タグごとに異なるテンプレートを適用する方法 WordPress

WordPressでは、カテゴリーごとにテンプレートファイルを出し分けることができますが、同様のことをタグ(tag)でも実現可能です。この記事では、タグごとに異なるテンプレートを適用する方法を解説します。

スポンサーリンク

タグ用テンプレートの命名規則

タグアーカイブページで使用されるデフォルトテンプレートは tag.php です。特定のタグ専用のテンプレートを作成したい場合は、以下のいずれかのファイル名で作成します。

  • tag-{slug}.php
  • tag-{ID}.php

たとえば、スラッグが news のタグには tag-news.php を作成すると、それが優先的に読み込まれます。

テンプレート階層の優先順位

WordPressは以下の優先順位でテンプレートを読み込みます。

  1. tag-{slug}.php
  2. tag-{ID}.php
  3. tag.php
  4. archive.php
  5. index.php

この階層を活用して、任意のタグにだけレイアウトをカスタマイズできます。

タグ「特集記事」にだけ専用テンプレートを適用する例

例えば、特集記事 というタグのスラッグが feature の場合、以下のファイルを作成することで専用のレイアウトを適用できます。

tag-feature.php

このファイルにHTMLやループを記述すれば、他のタグページとは異なる表示を実現できます。

テンプレートを関数で制御する応用パターン

ファイル数を増やしたくない場合は、tag.php 内でタグスラッグによる条件分岐を行い、テンプレートパーツを切り替える方法もあります。

<?php
$tag = get_queried_object();
if ($tag->slug === 'feature') {
  get_template_part('tag-parts/feature');
} else {
  get_template_part('tag-parts/default');
}
?>

このように記述することで、管理しやすく柔軟なレイアウト出し分けが可能になります。

よくある質問(FAQ)

Q. 特定のタグが付いた記事に異なるテンプレートを適用するには?
A. single_templateフィルターでhas_tag(‘tag-slug’)を確認し、対象タグの場合は別のテンプレートファイルパスを返します。locate_template()で子テーマの対応ファイルを探して使用します。
Q. 複数のタグの組み合わせでテンプレートを切り替えるには?
A. has_tag()に配列を渡してhas_tag(array(‘tag1’, ‘tag2’))で複数タグのOR判定ができます。AND判定は複数のhas_tag()をandで結合します。
Q. タグとカテゴリーを組み合わせたテンプレート切り替えは?
A. in_category()とhas_tag()を組み合わせた条件でtemplate_includeフィルターを実装します。条件が複雑な場合はsingle.php内でget_template_part()の引数を動的に生成する方法が保守性高いです。

まとめ

タグごとに異なるテンプレートを適用すれば、ユーザー体験を高めるカスタマイズが行えます。tag-{slug}.php のようなテンプレート階層を活用することで、簡単に出し分けが可能になるので、ぜひ導入してみてください。