page-*.phpは問題なのか?

Handwritten PHP page template structure sketch with header, main content area, and footer sections

先日、twitter(現X)で「WordPressで page-*.php 使うのって時代遅れなの?」「page-*.phpでテーマ作るやつは無能」「WordPressコミュニティは初心者に厳しい、良心がない」という喧々轟々の議論が巻き起こっていたので、問題の整理を含めて筆者もいっちょ噛みしてみたい。おそらく、発端は下記のつぶやき。

そもそもpage-*.phpとは?

ここではあたかも page-*.php に共通認識があるかのような議論が巻き起こっているが、そもそもWordPressの基本仕様から整理してみよう。WordPressには現在クラシックテーマとブロックテーマが存在しており、 page-*.php がクラシックテーマでのテンプレートを前提にしているのはそうなのだが、どちらのテーマにも「テンプレート階層」というものが存在する。

固定ページの場合、プライバシーポリシーのような特殊なものを除いて、次のような優先順位で解決される。

  1. カスタムテンプレートファイル – 特定のヘッダーを書くことでカスタムテンプレートと認識されたファイルが利用される。ページごとに指定可能で変更もできる。
  2. page-{slug}.php – ページスラッグが recent-news の場合、WordPress は page-recent-news.php を使う。
  3. page-{id}.php – ページ ID が6の場合、WordPress は page-6.php を使う。
  4. page.php
  5. singular.php
  6. index.php

ブロックテーマでも事情は同じで、基本的には拡張子をHTMLに変換したバージョンのテンプレート階層が採用される。この仕組み自体にはいいも悪いもなく、WordPressの仕様である。筆者は page-{id}.php を一度も使ったことがないが。

ニュースやブログのようなWebサイトであれば、固定ページに該当するものとして page.php を作成し、トップページには front-page.php を利用すればそれで事足りるだろう。上記のテンプレート階層を使うとしたら、たとえば特設ページやイベント用ランディングページのために page-1col.php のようなものを作成してデザインの幅を持たせられるとか、カスタムHTML+カスタムCSSで入稿できるようにする、というのはよくあるカスタマイズだ。

一方で、固定ページの分類が多いサイト、たとえば大学とか取扱製品の多い製造業、行政機関などに共通するのは親子階層を多用する、ということだ。大学でいえば「学部トップ」があり、「各学部トップ」があり、という具合である。まあ、この規模になると「固定ページ」だけではなくカスタム投稿タイプやカスタムタクソノミーをふんだんに使うことが多く、Post 2 Post のような「投稿と投稿の紐付き」を表現するプラグインも使うことになるが、とにかくテンプレートの種類が多くなる。こうした場合、先ほど紹介した「固定ページのテンプレートが3つぐらい」だけではどうにもならないので、テンプレートが増えてきたり、なるべくやりたくないがテンプレート内での分岐判定(子ページかどうか)も必要になるだろう。

いったんまとめると、WordPressにはテンプレート階層という仕様があり、それを利用すること自体はいいも悪いもない。

page-*.phpに怒る人は何に怒っているのか?

さて、そもそもタイムラインを賑わせたのはなんだったか?

上記のツイート(川井さんは知り合いなので勝手に取り上げた、怒ってるわけではないだろうが)に象徴的なのだが、ここでは上記で紹介したテンプレート階層とはまったく別で、「本来ならコンテンツに該当する部分をPHPファイルにベタ書きしている」パターンが暗黙的に問題となっている。

具体的にいうと、スラッグでマッチする機能を使って、「この会社について」ページ( /about )の中身を全部 page-about.php に書いていて、しかもそれがページの数だけ存在するパターンである。

<?php
/**
 * Aboutページのテンプレート
 */
get_header();
<main class="page page-main">
    <h1 class="page__title--about">マイカンパニーについて<small>About</small></h1>
    <p class="page__paragraph--about">弊社は創業700年の老舗企業です</p>
    <!-- このままBEMってるHTMLが延々と書いてある -->
</main>
get_footer();

これがWordPressの強みをいかせていないのは明らかである。

  1. 編集するのがめんどくさい。クライアントが非技術者の場合、編集するたびに膨大な労力か制作会社への依頼料が発生する。良心がない。
  2. プラグイン(SEO系とか)の強みを生かせない。良心がない。
  3. サイト内検索に引っかからない。良心がない。

その意味ではテンプレート階層と関係なく、「コンテンツをテンプレートに書くな!」という意味で「 page-*.php を使うな!」と言う人がいるのは理解できる。

page-*.php を擁護する人は何を擁護しているのか

では、page-*.php を使う人は「悪い」のか。しかし、こういう人もいる。

じつはこのパターンはけっこう多い。とりわけ、WordPressは非常に広く使われており、Webデザインに強い会社が作ったコーポレートサイトのトップページなどにその傾向が強い。筆者の経験によると、特徴は以下の通り。

  • GSAPとかつかってふわっとさせたり、スクロールスパイやAOSなどを多用している。FOUS(Flash of Unstyled Content=アニメーションの開始前に崩れたHTMLがチラ見えしてしまうこと)を防ぐことに心血を注いでいる。
  • とにかくBEMっており、pやul > li などにも執拗にクラスが与えられている。Emmetを使っていたりする。
  • wp_enqueue_script() などは使わないことが多い。npmで固められたapp.js一発勝負。
  • インデントはスペース2つで、WordPressの標準であるタブは使わない。
  • 青山あたりにおしゃれなオフィスを構えており、コーポレートサイトのフォントはヘルベチカで英語ばっかり書いてある。

こうしたテンプレートが生まれる背景は、制作フローというより商流の問題だろう。

Webデザインは黎明期から「チラシ」や「雑誌」の連想で作られており、その制作者も印刷などから流れてきた人が多い。とくに会社が成長する過程で代理店のようなムーブをするようになった会社は「まずデザインをつくってそれをHTMLにし、その後WordPressにする」というフローを辿る。この過程で「WordPressにする」というのは製造過程の一種のようなもので、ではデザインの段階でそこまで考慮しているかというと、していない場合が多い。そもそも「デザインする人」「HTMLを作る人」「WordPressにする人」が全部別なので、行ったり来たりすることができない。「これ、WordPressだとどうですか?」とやりとりして高度にコンポーネント化されたデザインを作り上げる、素晴らしいチームワークを発揮するオーサムなサイトも世にあるだろうが、そうでないことの方がずっと多い。そもそも、社長プレゼンでトップページのふわっとした感じの繊細な作りがオッケーされているのだから、page-*.php が何個増えようが大した問題ではないのだ。むしろ1pxでも変えたら◯すぞという感じである。

たとえばAOSをブロックに適用するプラグイン Animate on scroll は存在しているのだが、既存のHTML+JS+CSSを再解釈してテンプレートに落とし込み、エディターで設定できるようやりなおすのはめんどくさすぎるのでWordPress工程を担当する人が半ば諦めの気持ちで page-*.php を量産するのも致し方ないだろう。これはHTML作成とWordPressを兼任する人が同じであったも状況は変わらないはずだ。

ある程度良心的な会社はカスタムフィールド製造業としての職人魂を発揮してテンプレートのいくつかを編集可能にするかもしれない。その一方で「ちょっとしたPHPファイルの編集で追加費用が貰える」と考える人もいるかもしれない。良心がない。

まとめると、page-*.php を量産するモチベーションは必ずしも「レベルが低い環境」でだけ発生するわけではない。そうせざるを得ない環境は存在しうる、ということだ。

結局page-*.phpは使っていいのか?

理由があれば使ってもいいし、基本的なタグしかないなら the_content() しとけばいい、ブロックを作れるなら作ればいいし、JSが苦手ならACFで頑張ればいい――それが筆者の結論なのだが、今回のタイムラインを賑わせたのはそういう話なのだろうか?

実は火種になった方のプロフィールをみると、「マナブさんの弟子」と書いてある。マナブといえば、このCapital Pでも取り上げた「12万円のプログラミング情報商材が炎上してWordPressがもらい事故」で登場したWordPress構築ビジネス情報商材の方である。そういえばKenta、もうYouTubeやってないのか?

もしかしてだけど……その教材に「固定ページはとりあえず page-*.php 使っとけ」と書いてあったのでは? ただそれだけなのでは?

そう考えると、タイムラインを賑わせた「WordPress界隈怖すぎ」「page-*.php はcanvasで使うよな!」などの情報は全て燃料でしかなかったのでは? 我々は、そう、筆者も含めて、あなたも単なる「情報商材の燃料」でしかなかったのでは? そういう人たちを包摂したところでコントリビュートするのか? 儲からなくなったらいなくなるだけでは?

そう考えると、ラーメンすするでなくても「◯すぞー!」と言いたくなるものだ。

追記

SUSURU TVで閉めたところ思い出したので追記するが、今後、テーマにおけるデザインの優位性(テーマがサイトデザインに対して影響力を発揮できる度合い)はどんどん低下していくというのが筆者の予測だ。これは実際のテーマ関連機能がサイトエディターに集約しつつあることからも予測できる。

おそらくだが、将来的にWordPress本体はtheme.jsonによる設定値の集合(余白の単位、フォント、カラーパレットなど)のみをテーマに期待するようになるだろう。そう遠くない未来、page-*.php 論争のことは誰も覚えていないかもしれない。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください