WordPress 4.4の個別投稿templateはpost typeとslugで分けられる
公開日: 執筆:佐藤
WordPress 4.4では、single-{post_type}-{post_name}.phpを置くと、特定の個別投稿だけへテンプレートを割り当てられます。通常の投稿と同じ編集画面を使いながら、ページの骨組みだけを一件分変えたいときに使います。本文へ例外用のHTMLを積み上げる前に、本文で管理する内容と、テンプレートで決める構造を分けます。
この機能は、投稿ごとに専用ファイルを増やすためのものではありません。表示の違いが一度きりなのか、同じ種類の投稿へ繰り返すのかを先に決めます。一度きりの案内でも、長く使うURLと固有の導線があるなら個別テンプレートにする意味があります。反対に、複数の投稿へ同じ違いが増えてきたなら、投稿タイプ全体のテンプレートや共通部品へ戻す時期です。
WordPressが探すファイルの順番
WordPress 4.4のField Guideは、single-{post_type}-{post_name}.phpがテンプレート階層へ加わったことを案内しています。{post_type}は投稿タイプ、{post_name}は投稿スラッグです。
WordPress 4.4のソースでは、個別投稿を表示するとき、まずsingle-{post_type}-{post_name}.phpを探し、次にsingle-{post_type}.php、最後にsingle.phpを探します。ファイルがあれば先に見つかったものが使われます。つまり、個別テンプレートは同じ投稿タイプの標準テンプレートより優先されます。
たとえば、施工事例という投稿タイプのスラッグがworksで、その中の「完成見学会」という投稿のスラッグがopen-houseなら、ファイル名は次のようになります。
single-works-open-house.php
このファイルがあるのは、その一件の投稿だけです。ほかの施工事例にはsingle-works.phpが使われ、single-works.phpもなければsingle.phpへ戻ります。個別テンプレートを追加しても、同じ投稿タイプのすべてのページを変えるわけではありません。
固定ページはこの規則と混同しないでください。固定ページには、ページテンプレート、page-{slug}.php、page.phpという別の探し方があります。投稿タイプの個別投稿を変えたいのか、会社案内のような固定ページを変えたいのかで、使うファイル名と編集画面での扱いが変わります。
本文の違いと骨組みの違いを分ける
個別テンプレートが必要なのは、文章や写真が違うからではありません。見出しの階層、問い合わせへの導線、表示する情報の順序、一覧へ戻る場所のように、ページの骨組みが違うときです。
| 変えたいもの | 管理する場所 | 個別テンプレートを使う条件 |
|---|---|---|
| 記事本文、写真、日付 | 投稿の本文またはカスタムフィールド | 他の投稿と同じ骨組みで読める |
| 投稿タイプ全体の見出しや一覧導線 | single-{post_type}.php |
同じ投稿タイプの全件で共通する |
| 一件だけの特設構成 | single-{post_type}-{post_name}.php |
その投稿だけで骨組みや導線が変わる |
| 複数の投稿で繰り返す補足表示 | 共通テンプレート部品またはカスタムフィールド | 個別ファイルを複製し始めている |
たとえば、通常の施工事例は本文、写真、関連事例、問い合わせ先の順で表示するとします。そのうち一件だけ、見学会の日程、申込条件、会場案内を本文より先に置く必要があるなら、個別テンプレートでその順序を決める方法があります。日程や会場名そのものは投稿側へ残し、テンプレートには「どの情報をどこへ置くか」だけを書きます。
ファイルの中へ日程、電話番号、担当者名を直接書くと、更新する人は投稿の編集画面だけを見ても直せません。内容を変える人と、レイアウトを直す人の作業場所を分けるためにも、固有の文章や数値は投稿側に残します。テンプレートは、必要な項目があるときにどう見せるかを受け持ちます。
スラッグをURLとテンプレートの両方から確認する
個別テンプレートの名前は投稿スラッグと結び付きます。公開後にスラッグを変えればURLが変わるだけでなく、WordPressが探すテンプレート名も変わります。URLを変える判断と、表示を変える判断を同じ作業にしないでください。
作る前に、対象の投稿タイプ、投稿スラッグ、現在の個別URLを記録します。そのうえで、single-{post_type}-{post_name}.phpを置き、次の四つを開きます。
- 対象となる投稿。専用の構成で表示されるかを見る。
- 同じ投稿タイプの別の投稿。専用の構成が漏れていないかを見る。
- 投稿を編集して本文や画像を更新した画面。内容が投稿側の更新だけで反映されるかを見る。
- 対象投稿のURL。スラッグを変えずにテンプレートを追加した場合、以前のリンクが同じページを開くかを見る。
子テーマを使うサイトでは、WordPressは子テーマ側のファイルを親テーマより先に探します。親テーマへ個別テンプレートを置いたつもりで、子テーマに同名ファイルが残っていれば、意図した方が使われないことがあります。子テーマを使っている場合だけ、同名ファイルの有無も確認します。
例外が増えたら設計を戻して見る
同じ投稿タイプに個別テンプレートが三つ、四つと増えるなら、それぞれが本当に一回限りの例外かを見直します。似た構成の投稿を新しく作るたびにファイルを複製する方法では、見出しや問い合わせ先を直したときに修正箇所が散らばります。投稿タイプを分ける、共通のテンプレート部品を作る、投稿側の項目を増やす、といった選択肢を比べます。
個別テンプレートは例外を隠すためではなく、例外を見える形にするためのものです。まず、表示を変えたい投稿を一件選び、本文で変えるものとテンプレートで変えるものを二列に分けます。ここが決まれば、ファイル名と確認するURLも決まります。
関連記事

