WordPress 4.3のsingular.phpはsingle.phpとpage.phpがないときの共通テンプレートとして使う
公開日: 執筆:佐藤
singular.php は、投稿や固定ページを表示するとき、先に探す single.php や page.php が見つからない場合に使われる共通テンプレートである。投稿と固定ページの重複を減らすために、二つのファイルがあるまま singular.php を足しても、表示は切り替わらない。テンプレート階層の最後に置く共通の受け皿として使う。
WordPress 4.3では、個別の内容を表示する画面に singular.php を使えるようになった。ただし、投稿では single.php、固定ページでは page.php の判定が先に行われる。共通化したいからという理由だけで singular.php を作ると、変更が反映されない。この順序を先に知っておく必要がある。
投稿と固定ページでは探す順番が違う
通常の投稿を開いたとき、WordPressは投稿タイプ用の single-{post_type}.php、次に single.php を探す。固定ページでは、指定したページテンプレート、page-{slug}.php、page-{id}.php、page.php の順に探す。ここまででファイルが見つかれば、そのファイルが使われる。
どちらも専用のテンプレートが見つからないときに、個別表示全体の共通候補として singular.php が使われる。さらに見つからなければ、最後は index.php へ進む。
| 表示する内容 | 主な候補 | singular.php が使われる場面 |
|---|---|---|
| 通常の投稿 | single.php |
single.php がない場合 |
| 固定ページ | page.php |
指定テンプレートや page.php がない場合 |
固定ページのスラッグが company |
page-company.php |
page-company.php、page.php がない場合 |
| 個別投稿タイプ | single-{post_type}.php |
そのファイルと single.php がない場合 |
たとえば、テーマに single.php と page.php があるなら、その二つを残したまま singular.php だけを書き換えても、通常の投稿と固定ページには影響しない。反映しない原因をキャッシュやPHPの記述だけに絞る前に、実際にどのテンプレートが選ばれるかを見る。
共通の枠を作りたいならテンプレート部品へ分ける
投稿と固定ページで、見出しの枠、本文の幅、パンくずの位置だけをそろえたいことはある。その場合、single.php と page.php をなくして singular.php へ一つにまとめる方法は使える。しかし、投稿の日付やカテゴリー、固定ページの問い合わせ先まで一つの条件分岐へ押し込むと、表示の責任が見えにくくなる。
二つのテンプレートを残し、共通するHTMLだけをテンプレート部品として読み込む方が、後から直す場所を確かめやすい。たとえば、本文の枠だけを content-singular.php に置き、投稿と固定ページから呼び出す。
<?php get_template_part( 'content', 'singular' ); ?>
投稿用の single.php では、その前後に公開日、カテゴリー、前後の記事への案内を置く。固定ページ用の page.php では、会社案内やサービス説明の末尾に問い合わせ先を置く。共通にするのは、同じ情報を同じ役割で見せる部分だけでよい。
| 表示する内容 | 置き場所 |
|---|---|
| 見出し、本文、共通の余白 | 共通のテンプレート部品 |
| 公開日、カテゴリー、前後記事 | single.php 側 |
| 会社案内の連絡先、サービスページの申込み先 | page.php 側、またはページ固有のテンプレート |
| 特定の固定ページだけの構成 | page-{slug}.php または指定ページテンプレート |
ファイルを減らすことは、テーマを整理した証拠にはならない。投稿を読む人に必要な案内と、固定ページを読む人に必要な案内が違うなら、違いを残した方が修正も確認も安全である。
singular.phpだけで運用する場合は例外を先に決める
小さなサイトで、投稿と固定ページの見出し、本文、末尾の案内まで同じ構成なら、single.php と page.php を置かずに singular.php だけで表示する方法もある。この場合、個別表示の修正先が一つになる。個別投稿タイプも同じ構成でよいなら、共通の初期形として使える。
ただし、固定ページを増やしたあとで会社案内だけ別の構成にしたい場合は、page-company.php のような専用テンプレートを作る。投稿の末尾に関連する記事を出したい場合は single.php を追加する。singular.php を基本にしても、専用テンプレートを置けばそちらが優先される。
この使い方では、共通の画面へ変更を加えたとき、投稿と固定ページの両方が変わる。本文の幅を直す作業でも、記事、会社案内、問い合わせページを順に開いて確認する。共通化の範囲は、見た目が似ているかではなく、変更を同時に受けてもよいかで決める。
追加する前に現在のテンプレートを一覧にする
テーマへ singular.php を追加する前に、テーマの直下にある single.php、page.php、single- で始まるファイル、page- で始まるファイルを書き出す。次に、どのURLでどのファイルが使われるかを対応させる。これを行わないと、共通化のつもりで singular.php を足しても、古い専用テンプレートが使われ続ける。
作業後は、通常の投稿、固定ページ、専用テンプレートを使う固定ページを一つずつ開く。見出し、本文、日付、カテゴリー、問い合わせ先まで見て、表示が変わるべき画面と変わらない画面を分けて確認する。singular.php は便利な近道ではない。個別ページの共通部分をどこまで共有するかを、テンプレート階層に沿って決めるための選択肢である。
関連記事

