ブロックテーマの子テーマを作って style.css にCSSを書いたのに、まったく反映されませんでした。原因は「子テーマの style.css が読み込まれていなかった」ことです。実際に自分の環境で確かめた手順と、同じ日に引っかかったアイキャッチ画像の話までまとめます。
症状:書いたCSSが一行も効かない
WordPressのブロックテーマ(Twenty Twenty-Five)で子テーマを作りました。やりたかったのは、表に罫線を引くことと、コードの背景に色を付けることです。どちらもCSSで書けば済む話なので、子テーマの style.css に書きました。
ところが、保存して表示を確認してもまったく変化がありません。罫線も出ないし、コードの背景も白いままです。
ここで最初に疑ったのは、いつもの「セレクタが違う」「詳細度が足りない」「キャッシュが残っている」あたりでした。CSSが効かないときの原因としては、まずそこを見るのが普通です。でも、書き方を変えても、セレクタを変えても、何をやっても結果が変わりませんでした。
「CSSの書き方が悪い」という前提で延々と直し続けました。実際にはCSSの中身は最初から関係なかったので、この時間はまるごと無駄になりました。
原因:style.css がそもそも読み込まれていなかった
方針を変えて、ブラウザでページのHTMLを直接確認しました。すると、子テーマの style.css を読み込む記述がどこにも出ていませんでした。
つまり、CSSが効かなかったのではなく、CSSがブラウザに届いていなかったということです。ファイルは確かに存在していて、中身も書かれているのに、ページからは一度も参照されていませんでした。
調べて分かったのは、ブロックテーマの子テーマは、style.css を自動では読み込まないということです。子テーマを作ってCSSを置けば当然読まれる、と思い込んでいたのが間違いでした。
CSSが効かないときは、まずそのCSSが本当に読み込まれているかをHTMLで確認してください。セレクタや詳細度を疑うのは、読み込まれていることを確認してからです。順番を逆にすると、私のように延々と的外れな修正を続けることになります。
「効かない」と「届いていない」は別物
この2つは症状が同じに見えます。画面が変わらないという意味では区別がつきません。ですが原因はまったく別で、対処も別です。
| 状態 | 見え方 | 直す場所 |
|---|---|---|
| CSSが届いていない | 何を書いても変化なし | 読み込みの設定 |
| CSSは届いているが効かない | 一部だけ効かない/上書きされる | CSSの中身 |
「何を書いても変化がない」というのは、届いていない側のサインでした。一部だけおかしいのではなく全部おかしいときは、中身ではなく経路を疑ったほうが早いです。
対処:functions.php で明示的に読み込ませる
子テーマの functions.php で wp_enqueue_style を書いて、style.css を明示的に読み込ませました。これで、それまで一切反映されなかったCSSがそのまま反映されました。罫線もコードの背景も、書いた通りに出ました。
CSSの中身は一文字も直していません。読み込ませただけで、最初に書いたCSSがそのまま効きました。やはり中身の問題ではありませんでした。
キャッシュ対策にファイル更新時刻を使う
読み込ませたあとに問題になるのがキャッシュです。CSSを修正しても古いものが表示されると、また「効かない」と勘違いします。
そこで、バージョン指定に filemtime(get_stylesheet_directory().'/style.css') を使いました。ファイルの更新時刻をバージョンとして渡す形です。style.css を編集すればバージョンが変わるので、更新のたびに手でバージョン番号を書き換える必要がなくなります。
これはあくまでブラウザ側でのファイル取り違えを防ぐための対策としてやったものです。サーバー側やプラグイン側のキャッシュまでこれで解決するかどうかは、私の環境では検証していません。分かっていないことは分かっていないままにしておきます。
同じ日にもう一つ:アイキャッチ画像も「作っただけ」では出ない
同じ日に、まったく同じ構造の問題にもう一度ぶつかりました。アイキャッチ画像です。
画像を作って、記事にアイキャッチとして登録しました。それでも表示されませんでした。ここでも最初は画像そのものや設定を疑いましたが、原因は別のところにありました。
ブロックテンプレートに post-featured-image ブロックを置いて、初めて表示されました。登録することと、表示することは別の作業だったわけです。
- 子テーマに style.css を置く → それだけでは読み込まれない
- 記事にアイキャッチを登録する → それだけでは表示されない
- functions.php で
wp_enqueue_styleを書く → 反映された - テンプレートに
post-featured-imageブロックを置く → 表示された
この日に学んだ考え方
2件とも構造が同じでした。「用意した」だけで、「出力する側に置いていなかった」のです。ファイルは存在する、設定は済んでいる、それでも画面に出ない。この状態のとき、用意したものをいくらいじっても何も変わりません。
ブロックテーマでは、出力されるHTMLがテンプレート側で決まります。だから「置いたものが自動で出てくる」という前提を捨てて、出力される側に自分で置いたか確認するのが確実でした。CSSなら読み込みの記述、アイキャッチならブロックです。
なお、これはTwenty Twenty-Fiveで子テーマを作った私の環境で確認した内容です。他のブロックテーマでも同じかどうかは試していないので分かりません。
- ブロックテーマの子テーマは
style.cssを自動では読み込まない。書いたCSSが一行も効かないときは、まずHTMLで読み込まれているか確認する。 functions.phpでwp_enqueue_styleを書いて明示的に読み込ませたら、CSSの中身は変えずにそのまま反映された。- キャッシュ対策として
filemtime(get_stylesheet_directory().'/style.css')をバージョンに使い、更新のたびに手でバージョンを書き換えなくて済むようにした。ただしサーバー側キャッシュへの効果は未検証。 - アイキャッチ画像も同じで、登録しただけでは表示されない。ブロックテンプレートに
post-featured-imageブロックを置いて初めて表示された。 - 共通しているのは「用意しただけで、出力側に置いていない」という構造。用意した側をいじり続けても直らない。


