こんにちわ、PHPエンジニアのエンジニア婦人(@naho_osada)です。
PHPエンジニアとして9年~の経験があります。
突然ですが、開発している最中につまらないことでWarningが出るとめちゃくちゃ腹が立ちますね。
こんなことで止まっている場合じゃないのに!って。
今回はWordPressの固定ページのテンプレート選択でWarningが出た話をします。
最後までこれだ!という発生条件はわからないままとなりましたが、そのときの状況を公開しておきます。
状況
- TwentySeventeenをテーマに子テーマを作った。
- 固定ページに別途テンプレートを適用させたくて、page-〇〇〇.phpを作った。
- なんだかうまく認識されなくてごちゃごちゃテンプレートファイルを作ったり消したりしていたら、テンプレートのセレクトボックスでWarningが出るようになった。file_get_contentsできないって、/wp-includes/class-wp-theme.php
- 一旦ログアウトしてみても、ブラウザキャッシュクリアしても、キャッシュクリアプラグインを使ってもダメ
子テーマを作って調整中に起きそうな事案です。
原因と思われるもの
テーマのファイル名から作り出すハッシュがキャッシュとして保存?されていることのようでした。
このハッシュに保存されているキャッシュ情報からテンプレート情報を読んできているので、存在しないテンプレートファイルだと「ないんですけど!」って怒られる仕様…らしい…?
テーマを変えても何してもそれがリセットされませんでした。リセットされてもいいようなものですが…これWordPressのバグじゃない?
対処法
テーマ名からハッシュを作り出しているので、不要なテンプレートを削除した状態でテーマ名を変えました。
テーマ名を変えたことでハッシュが変更され、同時にキャッシュ情報も変更された為、問題がなくなったとみられます。
根本解決にはなっていない気がしますが、この場合は根本解決より対処法で良いでしょう。そこまで突っ込む気にはなりませんでした…
何故子テーマを使うのか
WordPressは、本体でもプラグインでも更新があると更新通知が来て更新できるようになりますね。
テーマも同じです。プラグインよりは見かける頻度が少ないとは思いますが、テーマ更新もちゃんとあります。
そのときにベースとなるテーマのソースを触っている場合、自分で変更した箇所がすべて初期化されます。
対象はプログラムだけじゃありません。CSSも何もかも戻ります。
それを防ぐために、子テーマにしましょうとWordpressはお達しを出しています。
たまに直接テーマを変更してしまって、子テーマですらないのでテーマの更新がかけられない…というパターンを見かけますが、あまり好ましい状態ではないと思います。
基本は良い方に改修されているわけですからね。公式から出されるこう言った更新は放置せずに更新をかけたいところです。
まとめ
- テーマカスタマイズ中で、固定ページテンプレートの選択でWarningが出てしまったら、思い切って不要なテンプレートを削除して、テーマ名を変えてしまう
- 恐らくキャッシュが原因
本筋とは関係ないところではまることも、開発者あるあるです。
よくわからないトラブルが起きた時こそ、冷静に対処できるカッコイイプログラマでありたいです。