• WordPress 4.4の個別投稿templateはpost typeとslugで分けられる

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を置き、次の四つを開きます。

  1. 対象となる投稿。専用の構成で表示されるかを見る。
  2. 同じ投稿タイプの別の投稿。専用の構成が漏れていないかを見る。
  3. 投稿を編集して本文や画像を更新した画面。内容が投稿側の更新だけで反映されるかを見る。
  4. 対象投稿のURL。スラッグを変えずにテンプレートを追加した場合、以前のリンクが同じページを開くかを見る。

子テーマを使うサイトでは、WordPressは子テーマ側のファイルを親テーマより先に探します。親テーマへ個別テンプレートを置いたつもりで、子テーマに同名ファイルが残っていれば、意図した方が使われないことがあります。子テーマを使っている場合だけ、同名ファイルの有無も確認します。

例外が増えたら設計を戻して見る

同じ投稿タイプに個別テンプレートが三つ、四つと増えるなら、それぞれが本当に一回限りの例外かを見直します。似た構成の投稿を新しく作るたびにファイルを複製する方法では、見出しや問い合わせ先を直したときに修正箇所が散らばります。投稿タイプを分ける、共通のテンプレート部品を作る、投稿側の項目を増やす、といった選択肢を比べます。

個別テンプレートは例外を隠すためではなく、例外を見える形にするためのものです。まず、表示を変えたい投稿を一件選び、本文で変えるものとテンプレートで変えるものを二列に分けます。ここが決まれば、ファイル名と確認するURLも決まります。

戻る