comments.phpがテーマに無い時にWordPressが読み込むファイルと仕組み

WordPress ロゴ

WordPressでブログをいじっていて、「コメント欄のデザインや見出しの文言を変えたいのに、肝心のテンプレートファイルがどこにも見当たらない」という場面に出くわしたことはありませんか。私もまさにこれでハマりました。コメントのタイトル部分を少し直そうと思って、使っているテーマのフォルダを開いてみたところ、あるはずのcomments.phpがいないんです。

「えっ、コメント欄はちゃんと表示されてるのに、ファイルが無いってどういうこと?」と、しばらく頭をかかえてしまいました。同じように、テーマの中を探し回って「comments.php が見つからない」と困っている方は、けっこう多いんじゃないかと思います。

結論を先にお伝えすると、テーマにcomments.phpが無い場合、WordPressはコア(本体)に同梱されたwp-includes/theme-compat/comments.phpという予備ファイルを自動で読み込んで、コメント欄を表示しています。

つまり「ファイルが無いのに表示される」のは不具合でも何でもなく、WordPressが裏で予備ファイルを読み込んで補っていた、というわけです。

この記事を読むと、comments_template()という関数がどんな順番でファイルを探しているのか、子テーマ・親テーマ・コア同梱の予備ファイルという3段構えの仕組みがどうなっているのか、そして最近のブロックテーマ(FSE)ではコメントの扱いがどう変わったのかまで、初心者の方にもイメージできるようにかみくだいて解説します。WEB制作を長年やってきた私が、自分がつまずいたポイントもまじえて解説します。読み終わるころには、「コメント欄をいじりたいなら、結局どこのファイルを触ればいいのか」がはっきり分かるはずです。

そもそも comments_template() って何をしている関数?

WordPressのテーマで、記事の下にコメント欄を表示しているのがcomments_template()という関数です。多くのテーマでは、single.php(個別記事のテンプレート)やpage.php(固定ページのテンプレート)の中に、こんな形で書かれています。

<?php
if ( comments_open() || get_comments_number() ) :
 comments_template();
endif;
?>

このひと言が呼び出されると、WordPressは原則として、今使っているテーマのフォルダにあるcomments.phpを読み込んで、その中身(コメント一覧や入力フォーム)をその場に差し込みます。

イメージとしては、「ここにコメント欄を置きたいから、設計図にあたる comments.php を持ってきて貼り付けてね」とWordPressにお願いしているような感じです。だからコメント欄の見出しを変えたいとか、フォームの並びを直したいとなったら、本来はこのcomments.phpをいじることになります。

ところが冒頭でお話ししたとおり、テーマによってはこのcomments.phpが最初から用意されていないことがあります。シンプルなテーマや、コメント機能をあまり重視していないテーマだと、わざわざ個別に持っていないケースがあるんですね。では、その「設計図が無い」状態でWordPressはどうやってコメント欄を出しているのでしょうか。ここが今回の本題です。

参考: comments_template() 関数リファレンス(WordPress Developer Resources)

関連記事:WordPressの基本テンプレートタグ一覧|初心者向けに現行仕様でやさしく解説

comments.phpが無い時に読み込むファイルはこれ

答えは、すでに結論でお伝えしたとおりです。テーマにcomments.phpが見つからないとき、WordPressは次の予備ファイルを読み込みます。

wp-includes/theme-compat/comments.php

これはWordPress本体(コア)にあらかじめ同梱されている、いわば「予備のコメントテンプレート」です。テーマ側に何も無くても、最低限コメント欄が壊れずに表示されるように、WordPressが標準で用意してくれているフォールバック(代替)用のファイル、というわけですね。

このwp-includes/theme-compat/というフォルダは、ふだんテーマをいじっているだけだとまず開かない場所なので、知らないとなかなか思い至りません。私も最初は「テーマの中にしかテンプレートは無い」と思い込んでいたので、ここは完全に盲点でした。コメント欄まわりで「ファイルが無いのに動いている」という不思議に出会ったら、まずこのコア同梱の予備ファイルを思い出してください。

実際の探し方は、関数の中身(ソースコード)を見るとはっきり分かります。最新のWordPressでは、おおよそ次のような流れでファイルを探しています。

if ( file_exists( $include ) ) {
 require $include;
} elseif ( file_exists( trailingslashit( $wp_template_path ) . $file ) ) {
 require trailingslashit( $wp_template_path ) . $file;
} else { // 後方互換用。将来のリリースで削除される予定。
 require ABSPATH . WPINC . '/theme-compat/comments.php';
}

コードの細かい意味が分からなくても大丈夫です。ざっくり言うと「テーマにファイルがあればそれを使う。無ければ、コア同梱の予備(theme-compat の comments.php)を使う」という3段構えになっている、ということだけ押さえておけば十分です。

参考: wp-includes/theme-compat/comments.php のソース(WordPress 公式リポジトリ)

子テーマ→親テーマ→コア同梱、という探す順番

さきほどのコードがやっているのは、実は「テンプレート階層」というWordPressの基本的な考え方そのものです。WordPressは、必要なテンプレートを決まった優先順位で上から順番に探していき、最初に見つかったものを使うという仕組みで動いています。comments.phpの場合、その探す順番は次のとおりです。

1. 子テーマの comments.php
まず最初に、いま有効化しているテーマ(子テーマを使っているなら子テーマ側)のフォルダを見にいきます。ここにcomments.phpがあれば、それを最優先で使います。自分でコメント欄をカスタマイズしたいときは、ここに置くのが正解です。

2. 親テーマの comments.php
子テーマに無ければ、その元になっている親テーマのフォルダを探します。子テーマというのは親テーマを土台にして一部だけ上書きする仕組みなので、子テーマに無いファイルは自動的に親テーマのものが使われる、というわけです。

3. コア同梱の wp-includes/theme-compat/comments.php
子テーマにも親テーマにもcomments.phpが無かったとき、最後の受け皿として読み込まれるのが、先ほどの予備ファイルです。テーマがコメントテンプレートを一切持っていなくても、コメント欄が真っ白に崩れたりせず、最低限の形で表示されるのはこのおかげですね。

この順番が分かると、最初の「ファイルが無いのに表示される謎」がきれいに解けます。あなたのテーマにはcomments.phpが無かったので、WordPressは1と2を飛ばして、3のコア同梱ファイルでコメント欄を描いていた、ということなんです。

ひとつ注意点を添えておくと、このコア同梱の予備ファイル(theme-compat)は、あくまで後方互換のために残されている古い仕組みで、公式にも「いずれ削除される予定」とされています。そのため、ここのファイルを直接書き換えてカスタマイズするのはおすすめできません。WordPress本体を更新すると変更が消えてしまいますし、本体の中身を勝手にいじるのは事故のもとです。コメント欄を自分好みに変えたいなら、次の見出しのやり方が正解ですよ。

参考: Comment Template – テーマハンドブック(WordPress Developer Resources)

関連記事:WordPressのトップページ、front-page.phpとindex.phpの違いと使い分け

コメント欄をカスタマイズしたい時はどうすればいい?

では、実際にコメント欄の見出しやデザインを変えたいときは、どこをどう触ればいいのでしょうか。結論はシンプルです。

使っているテーマのフォルダに、自分でcomments.phpを新しく作って置けばOKです。さきほどの探す順番のとおり、テーマにこのファイルがあればWordPressはそちらを最優先で読み込むので、コア同梱の予備ファイルではなく、あなたの作ったファイルでコメント欄が表示されるようになります。

ゼロから書くのが不安なら、おすすめは2つの方法です。ひとつは、現在読み込まれているコア同梱のwp-includes/theme-compat/comments.phpの中身をお手本として参考にし、それをベースに自分のテーマ用のcomments.phpを作る方法。もうひとつは、配布されている標準テーマ(Twenty Twenty-Four など)のcomments.phpを参考にする方法です。どちらも実際に動いているコードなので、構造をつかむのにちょうどいい教材になります。

さらに大事なのが、カスタマイズするときは必ず「子テーマ」を使うことです。親テーマのファイルを直接書き換えてしまうと、テーマがアップデートされたタイミングで変更がまるごと上書きされて消えてしまいます。子テーマ側にcomments.phpを置いておけば、親テーマが更新されても自分の変更はちゃんと残ります。ここはトラブルを避けるための鉄則なので、ぜひ覚えておいてください。

ちなみに、コメント欄の見た目を少し変えたいだけなら、PHPファイルを触らずにCSSの調整だけで済むことも多いです。色や余白を変える程度なら、まずはスタイルシートで試してみるのが手軽です。「どこまでをPHPで、どこからをCSSで」を切り分けて考えると、作業がぐっとラクになります。

ブロックテーマ(FSE)ではコメントの扱いが変わっている

ここまでは、いわゆる「クラシックテーマ」(single.phpcomments.phpといったPHPファイルでできているテーマ)を前提にお話ししてきました。最後に、最近のWordPressで増えてきた「ブロックテーマ(フルサイト編集/FSE)」での事情にも軽く触れておきますね。

ブロックテーマでは、そもそもコメント欄をcomments.phpというPHPファイルで管理しません。代わりに「コメント」ブロック(Comments ブロック)という部品をテンプレートに配置して、コメントの一覧や投稿フォームを表示する形に変わっています。コメントのタイトル、日付、投稿者名、本文、返信リンクといった要素も、それぞれブロックとして組み立てられているんですね。

そして、これらの編集はファイルをいじるのではなく、管理画面の「サイトエディター」から行えるようになっています。コードを書かなくても、画面上でブロックを足したり並べ替えたりしてコメント欄を整えられる、というのがブロックテーマの考え方です。従来のPHPテンプレートに慣れた人ほど「あれ、comments.php が無い」と戸惑いがちですが、ブロックテーマの場合はそもそも探す場所が違う、と理解しておくと混乱しません。

とはいえ、世の中にはまだまだクラシックテーマで動いているサイトもたくさんあります。今回の「comments.phpが無いときはコア同梱の予備が読み込まれる」という話は、クラシックテーマを使っている限りしっかり通用する知識です。自分のサイトがどちらのタイプか分からない場合は、テーマのフォルダにsingle.phpのようなPHPテンプレートがずらっと並んでいればクラシックテーマ、と判断してまず間違いありません。

参考: Displaying the Comments block in Block Themes(Learn WordPress 公式)

まとめ:comments.phpが無くても慌てなくて大丈夫

テーマのフォルダにcomments.phpが見当たらなくて「壊れてるの?」と心配になった場合でも、慌てる必要はありません。最後に今日のポイントをおさらいしておきましょう。

  • comments_template()は、原則としてテーマのcomments.phpを読み込んでコメント欄を表示する関数
  • テーマにcomments.phpが無いときは、コア同梱のwp-includes/theme-compat/comments.phpが自動で読み込まれる
  • 探す順番は「子テーマ → 親テーマ → コア同梱の予備ファイル」の3段構え
  • コメント欄を変えたいなら、子テーマに自分でcomments.phpを作って置くのが正解。予備ファイルやコア本体は直接いじらない
  • ブロックテーマ(FSE)ではPHPファイルではなく「コメント」ブロックで管理し、サイトエディターから編集する

大事なのは、「ファイルが無い=故障」ではなく、WordPressがちゃんと予備の仕組みでフォローしてくれている、と知っておくことです。この仕組みが頭に入っていれば、いざコメント欄をいじりたくなったときも、どこに何を置けばいいか迷わず動けます。

私自身、このwp-includes/theme-compat/の存在を知ったときは「なるほど、そんなところに予備が用意されていたのか」と腑に落ちました。WordPressはこういう「見えないところでの作り込み」が多く、仕組みを追うほど理解が深まります。

もしあなたがこれからコメント欄をカスタマイズしようとしているなら、まずは子テーマを用意して、お手本のコードを片手に小さく試してみてください。一度comments.phpの仕組みが分かると、ほかのテンプレートファイルの考え方も同じ要領で理解できるようになります。テンプレート階層は、WordPressを自由に扱うための大きな一歩です。