こんにちは、WPホームページ研究所の運営サポートチーム(@WP_LABO)です。
本日は中級者へ向けた記事です。業務メモとして残します。結論から言うと現時点でWP Fastest Cacheは「URL単位」のキャッシュ範囲指定しかできません。カンタンに言うと「header.php」や「single.php」の特定部分のソースを『キャッシュさせたくない』という状況には対応不可能。
当然そういった要望は一定数あるはずなのでサポートサイトも全チェックしてみましたが範囲を指定する方法は見つかりませんでした。念のためプラグイン開発者にも直接確認済みです。つまり現時点ではページの特定部分を指定してキャッシュさせるという技術はWP Fastest Cacheでは実現できていません。
本件はWelcart(ECシステム)を導入しているワードプレスサイトで高速化を図りたいという案件があり、できる限りの施策を試したうえでさらに高速化を実現する一環として「WP Fastest Cache」を導入したという背景があります。結果的に「WP Fastest Cache」側は、ソースの一部をキャッシュ外として指定できないのでテーマ側を「WP Fastest Cache」側に準拠しながらカスタマイズする必要があります。
目次
WP Fastest Cacheでキャッシュさせる範囲を指定する方法を模索
上記をまとめると「WP Fastest Cache」は国産のECシステム(Welcart)に対応していません。正確に言えば『対応していない』というよりはWelcart用に作られたテーマ側に問題があるとも言えるでしょう。
何が問題なのか?
WP Fastest Cacheはキャッシュ範囲を外す方法はURLでの指定が基本です。
あとはウィジェットに対しての設定があります。
つまりキャッシュ範囲を外すには「URLでの指定」と「ウィジェット単位での指定」が基本です。しかしながらウィジェット単位での指定だと『設定を有効』にしても反映されないパターンもあるようです。
上記のようにチェックを入れると「このウィジェットをキャッシュしない」となるわけですが、チェックを入れてもウィジェットのログイン状態がキャッシュされてしまう現象が発生するのを確認しています。
サイドバーに表示されているログインウィジェット
下記のスクリーンショットがサイドバーのログインボックスです。
メールアドレスとパスワードを入れてログイン
利用者はメールアドレスとパスワードを入れてログインを行うことで会員情報にアクセスできます。
ログイン中の表示状態
ログイン後は下記のようにログイン後の表示になります。
しかし、問題はここからです。利用者が「ログアウトするタイミング」が早ければ影響はありませんが、もしログアウトせずにそのまま放置していた場合に「キャッシュされる現象」が発生してしまいます。
やはり「ログアウト」するかどうかは利用者側の都合によりますよね。いくら「ログインした後はログアウトしてくださいね」とアナウンスしても実質その通りに動いてくれるユーザーはいないのが現実です。
このウィジェットがキャッシュ範囲から外れない原因は、WP Fastest Cache側の問題か、Welcart側の問題なのかは定かではありません。いづれにしてもチェックマークが効かない現象は発生するようです。
正確な検証をするには「シークレットモード」を使ったり「別端末のPC」を使ったり、または同じWifiネットワークにつながっていないパソコンを準備するなど確認作業がむずかしいというのもあります。導入しているテーマ側に何か問題がある可能性も少なからず潜みますのでなかなか断定にたどり着けません。
ただし、先述したように「ログイン状態をキャッシュ対象から外せない現象」が発生している以上は運営に問題があるのは事実です。極論を言ってしまえば『ECシステムにキャッシュを入れるな』となるわけですが、利用者やサイト運営者目線では高速化は重要なのでカンタンには導入を諦められませんよね。
仮に問題が「WP Fastest Cache側」にあったとしたら、おそらく今後のバージョンアップで正しく動作するようになるでしょう。ウィジェット部分の「Don’t cache this widget」は割と最近に実装された機能なので動作が不完全なのは現時点では仕方がないのかもしれません。対策としてはキャッシュされる前提としてログインウィジェットを少し工夫するのが現時点でのベストアンサーでしょう。
上記のようにログイン自体を別の画面にリンクさせることでキャッシュさせない工夫は可能です。
header.phpは避けようがない
テーマによってはheader.phpでログインの扱いが異なります。
ログインしたあとの状態がこちら。
上記を見比べると「会員登録」のリンクが『メンバー』に置き換わっていて、「ログイン」が『ログアウト』になって、カートの左側に『ようこそ(あなた名前)さん』と表示されていますよね。これはテーマ側が「ログイン前」と『ログイン後』をわかりやすくするために工夫して実装されている機能です。
WP Fastest Cacheではこういった場合に回避する方法がありません。もし僕たちが開発を設計するとしたら以下のような回避方法を準備しますが、現時点では残念ながら下記の方法は実装されていません。
あくまでもアイデアベースなので利用はできませんが、以下の書き方ができればheader.phpの特定箇所をキャッシュさせないという指定ができるのでより柔軟なキャッシュ運用ができるはずです。
例1:ifを使った方法
<?php if( wp_fastest_no_cache_area () ): ?>
//Range not to be cached by WP Fastest Cache
<p>No Cache Space</p>
<?php endif; ?>
例2:functions.phpで指定する方法
function wp_fastest_no_cache_area() {
//Range not to be cached by WP Fastest Cache
}
add_action('wp_xxx', 'wp_fastest_no_cache_area');
上記のような機能を実装する予定があるかどうかも含め開発者へ打診したので、もし今後WP Fastest Cacheで採用されることがあればさらに細部を指定したキャッシュ運用が実現できるようになるかもしれません。
先述した通り、現時点では「ページの一部を除外することはできない」というのがWP Fastest Cacheの仕様なので「header.phpやsingle.php」などの一部を対応させることはできません。回避策の1つとしてはテーマ側を大幅に改修する対策しか方法がありません。テーマが「ログイン前」と「ログイン後」で見た目に変化をつけるのもテーマ作成者側の「気を利かせた結果」です。ただ、利用者の多い人気のプラグインキャッシュシステムだけに「対応できない仕様」になってしまっているのはなんとも残念でなりません。
ちなみに検証用として新規ユーザーを追加するのは管理画面から行えますので、キャッシュの動作検証で新しいユーザーが必要になった場合は「Welcart Management > 新規会員登録」からお試しください。
まとめ
WP Fastest Cacheはワードプレスサイトの高速化の一環で有効なプラグインです。ただ、あくまでも高速化としてできる施策の1つでしかありません。また、有料と無料でも結果に大きな違いがありますので詳しくはプロに依頼するか順を追ってテスト運用するのがベストです。単純に「高速化」だけが目的なら他にも方法はたくさんあるので、最終ゴールを見据えて適切に手段を選ぶ必要があるでしょう。
仮に「WP Fastest Cacheの導入が前提」なら、テーマ側の「header.php」などテンプレートファイルを改修してログイン前後で表示切替に変化をつけないように工夫するのも避ける方法と言えます。
ワードプレスでは「ただ機能を実装するだけ」でなく、あらゆる状況を想定しながら「柔軟性」を持たせたプログラミング(およびカスタマイズ)がポイントになります。何事も片方(側面)からしか物事を見ていなければ情報は偏ってしまいます。そして情報格差が結果的に大きな溝を生み出すのが世の常です。いつも複数の目線から情報をキャッチして、冷静に判断できる力を養っていきましょう。
最新式の無料プラグインを事前公開
WordPressは公式サイトに登録済みのプラグインだけで全機能を補足しきれません。当サイトでは使いやすさを追求した魅惑的なプラグインを無料でダウンロードいただけます。運営ホームページのマーケティング力をさらに高めるチャンスです。まずは無料でDLしてお試しくださいませ。
→ 改良されたプラグインを確認する