事象と原因

とあるWordPressの修正案件でPHPファイルをいくら修正しても更新されなかった話です。

WordPressテーマのindex.phpやfunction.phpなどを更新してもまったくページに反映されない。
はたまたfunction.phpの中身を全て削除しても更新されず、ファイルそのものを削除しても影響されない。そんな事象です。

結果から言うとWordPressプラグインの「Hummingbird」の「Caching」が原因でした。
これはブラウザキャッシュとは異なり、サーバーキャッシュの機能を備えています。
(※ちなみに同名で日本の方が作ったWordPressテーマとは異なります)

原因解明に時間が掛かった理由

このプラグインのキャッシュの特徴として「管理画面にログインしていればキャッシュは適用されない」んですよ。

つまり

・管理画面にログイン状態 → 更新が反映される(一時的にキャッシュ無効)
・管理画面にログインしていない → 更新が反映されない(キャッシュ期間内のみ)

このような仕様なのである時は「更新できた」となるし、ある時は「いつまで経っても更新できない」状態にもなるんですよ。
まさかログイン状態になるとキャッシュプラグインが無効状態になるとは気が付かなかった。

なのでローカル環境で作業していた時は更新が反映できていたのに、デモ環境にアップロードすると
更新が反映できてない(管理画面にログイン状態ではないから)というように翻弄されることになります。

Hummingbirdプラグインのキャッシュクリア方法

画像の右中央にある「CLEAR CACHE」を押すことでキャッシュが削除されます。


詳しくプラグインの仕様を調査したわけではありませんが、恐らくHTML情報をDBに保存しているのだと思います。
そのためDBの書き換えが起こらなければPHPファイルを更新しても反映されず、サーバーキャッシュを利用してしまい、いつまで経ってもページの表示が変わらない。という感じかと。

よくあるキャッシュの対策

基本的なブラウザキャッシュは「履歴」からキャッシュをクリアしたり、Chromeなどは「スーパーリロード」などをすることでキャッシュがクリアされます。
ChromeのスーパーリロードはWindowsだと「Ctrl + F5」。Macだと「shift + cmd + R」です。

またCSSなどは読み込みのhrefに「~/style.css?var=20210413」などのクエリ文字列を付けると
最新のファイルが読み込まれます。キャッシュはページ読み込み速度を早めるためのものなので、基本的にはキャッシュを有効にし、修正が加わった時にのみクエリ文字列を更新する形が良いです。

まとめ

以上、WordPressのキャッシュプラグインの話でした。

本当に何をしてもページが更新されないので、Dockerを再起動してみたりファイルを削除してみたり、はたまた別のPCでデモ環境を見てみたりと、一つ一つ原因を探っていきました。

あまりにもページが変わらないので「あ…ありのまま今起こった事を話すぜ!おれはファイルを更新したと思ったら、更新できていなかった。な、何を言って…(省略)」

と一人ポルナレフ状態に3時間ほどなってました。よくサイト制作の初心者は簡単なミスでページが更新されない!となりますが、まさにその頃の混乱状態でしたよ…。