知らない人いるんだろうか。
どういうものか
「page.php」は汎用的なファイルで、固定ページを作ったらこのフォーマットを使用して出力される。
ブログ的なものであればそれでもいいんだけど、WEBサイトを作るにあたっては固定ページでいろんな物を作りたいので、それぞれ異なるデザイン・フォーマットで組みたいというのはよくある話。
ファイル名とページスラッグはリンクするので、対応するファイル名を付けたらページ別のデザインが可能になる。例えば「https://blog.megefeps.info/about/」だったら「page-about.php」で作ればいい。スラッグの代わりにページIDを振ってもいい。wpの仕様として「page-○○.php」は「page.php」よりも優先されるので、設置にあたってなにか設定が必要になるということもない。
ちなみに階層を付けていても同様。「https://blog.megefeps.info/about/company/」だったら「page-company.php」になる。ページIDが使えるので、階層違いの同スラッグが出てきてもやっていける。
各ページ用にファイルを作れることはわかった。逆に、複数ページをカバーできるファイルはどうやって作るのか。
カスタムテンプレートという概念
スラッグに紐づけないで使用できるファイルをwpでは「カスタムテンプレート」と呼ぶ。
「/order/」と「/entry/」で「page-form.php」を使う、みたいなことができる。
導入
該当のpage-○○.phpのソースコード先頭に以下のものを加えるだけ。
<?php
/*
Template Name: サンプル
*/
?>
そうすると固定ページの編集画面に「テンプレート」の項目が追加されて、「デフォルトテンプレート」と合わせて選択できるようになる。たまにwpのデザインは変わるので細かくは書いてもなんだけど、右側の「投稿」タブに出る。「概要」内に追加される。
だから、ページAのために作ったテンプレートをページBでも使いたい場合にこれを書き込めば、ページBでページAのテンプレートを使用できるということになる。
また、page-○○.phpは該当のスラッグがなくても別にエラーとかになったりしないから、カスタムテンプレート用に名前をつけておいて必要なページで指定するとかでもいい。
注意
とりあえず作ったテンプレートをカスタムテンプレート化するのだけはやめた方がいい。選択肢が不要に増えてめんどくさいし、無駄にややこしくなる。自分で作ったならまだ分かるけど、引き継いだらなんだこれ???ってなる。めっちゃ沢山あるページを調べた挙げ句、カスタム化してるけど普通に使ってるだけでした、とかしんどい。自分で作っておいて忘れちゃってたりしてもだるい。
あと、名前が被ってもエラーにならなかった気がする。重複はしんどい。
一番ありがちなミスは、テンプレートは引っ張ってきてもcssとかが読み込めてないパターン。全部のcssを読み込んでるとかstyleでimportしてるならいいんだけど、スラッグとかでifで出力してたら該当してなくて、って場合もある。
使い所
個人的にはあんまりない気がする。
固定ページは全部それぞれ尖ってて使い回しが利かないことばっかり。
例えば
唯一、問い合わせフォームだけは使い回す事が多い。
- https://blog.megefeps.info/form/entry/
- https://blog.megefeps.info/form/order/
- https://blog.megefeps.info/form/contact/
全部役割は違うけどテンプレートは統一。ページタイトルは当然異なるし、本文もそれぞれ書き込めば違いが分かるし、フォーム内容はプラグインで個別に作る。統一したほうが管理が楽で、統一しても誰も怒らないし、多分ユーザーからしてもフォームの見た目はサイト内で同じにしてたほうが混乱しないかと思うし。
この場合、cssやらjsは「form」の下層であればという条件で出力してある。ついでに、フォームのショートコードの記入はカスタムフィールドを使用、フィールドの表示条件も同様に「form」の下層。
突発的に使い回すよりは、こんな感じで予めに全体イメージをもって組むのがいいと思う。
まとめ
汎用性をもたせたテンプレートは実務においてほぼ使わない。そういうのが必要になったときはカスタム投稿とかでアーカイブ機能もつけたほうがいいじゃんってなって、pageよりはsingleに役割があったりする。でもそればっかりやってるといざって時に書き方を忘れることはあるので、どっかにメモっておくのがいいですね。この記事みたいに。
コメント