サイト内検索
キャッシュプラグインを有効にするとDateTime()やwp_date()などで取得される現在時刻が更新されなくなる症状について | ブログ相談 | Cocoon フォーラム

Topic starter2022年2月20日 11:09
色々と試したのですがうまくいかず、皆様のお知恵を拝借したいと思い投稿させていただきました。
もしアドバイスがありましたらいただけるとありがたいです。
現在独自のPHP関数を実装しようとしています。
この関数は現在時刻と設定された時刻を比較し、その大小判定に基づいて処理をおこなうかどうかを決定するためのものです。具体的には以下です:
function judge_period($startdate, $enddate){ $nowdate = new DateTime('now'); return ($startdate <= $nowdate && $enddate >= $nowdate); }
引数の$startdateと$enddateはいずれもDateTime型の変数となっています。
問題は"DateTime('now')"で取得される現在時刻が、キャッシュプラグイン(WP Fastest Cache)を有効にしていると更新されなくなる(==キャッシュが作られた時間で固定される)という点です。
試しにwp_date()などWordpressが用意している関数も使ってみたのですが同様でした。
仕方がないので現状はWP Fastest Cacheの定期的にキャッシュを削除する機能を使って対応しようとしていますが、あまりスマートなやり方ではないと感じています。
長くなりましたがお知恵を借りたいのは、
- キャッシュプラグインを有効にした際に現在時刻が固定されてしまうのはそういうものでどうしようもないのか?
- 対応策としてキャッシュを定期的に削除する以外に良い方法はないか?
- ほかに日時を利用した条件判定と同等のことができる策はないか?
という点です。
もし知見やアイデアがありましたらご教示いただけると大変ありがたく存じます。
よろしくお願いいたします。
2022年2月20日 20:10
キャッシュプラグインを有効にした際に現在時刻が固定されてしまうのはそういうものでどうしようもないのか?
あくまで僕の考えですが、キャッシュプラグインとはそのようにするためのプラグインなので、どうしようもないのではないかと思います。
キャッシュプラグインのキャッシュとは静的なHTMLを作成して訪問者に表示させているようなものです。
HTMLで動的な日にちの表示などはできないかと思います。
可能性があるとすればそういった機能があるキャッシュプラグインを使うことかなと。
とはいえ、そういうキャッシュプラグインが実際あるのかは分からないです。
2022年2月20日 20:13
あと、比較的簡単にできる方法としては、ページを読み込んだ後に読み込むJavaScript(ajax)によってサーバーから日付を取得し、日付部分を書き換えるみたいな実装にすることぐらいしか思いつきません。
Topic starter2022年2月20日 20:17
返信ありがとうございます。
そういうものですか…。
そうすると、たとえばCocoonのモバイルのみ/PCのみのウィジェットなどの分岐をともなうものもキャッシュプラグインをつかっているとうまく動作しないものなのでしょうか?
Topic starter2022年2月20日 20:18
あと、比較的簡単にできる方法としては、ページを読み込んだ後に読み込むJavaScript(ajax)によってサーバーから日付を取得し、日付部分を書き換えるみたいな実装にすることぐらいしか思いつきません。
こちらの返信を読む前に上記の返信をしてしまいました。
アドバイスありがとうございます。調べてみます。
2022年2月21日 19:13
そうすると、たとえばCocoonのモバイルのみ/PCのみのウィジェットなどの分岐をともなうものもキャッシュプラグインをつかっているとうまく動作しないものなのでしょうか?
モバイルのみ/PCのみのウィジェットは、CSSで実装しているので問題ありません。
日付はキャッシュを作った時点での日時がHTMLとして出力されるので、次にキャッシュが削除されるタイミングでしか更新されません。
こまめにキャッシュを削除すればある程度時刻は更新されますが、そうするとキャッシュを利用する意味がなくなるばかりか、逆にサーバーに負担がかかると思います。
なので、JavaScripで動的に変更するしか手頃な方法はないんじゃないかなと思います。
Topic starter2022年2月22日 08:39
モバイルのみ/PCのみのウィジェットは、CSSで実装しているので問題ありません。
なるほど。そういうことなんですね。
おっしゃるとおり、キャッシュを消しすぎると逆にサーバーに負担がかかりそうなので、どうしたものか考えてみます。
#それにしても、日付の取得という明らかに動的な動作が必要なものがキャッシュされてしまう方法でしか取得できないとは…。あまりそういう需要がないのでしょうか…。
2022年2月22日 19:44
キャッシュプラグインとはそういうものだと思います。
テーマにより、日付の入る箇所のHTML構造も違うことからプラグイン側で対応するのも不可能かと思います(ほぼテーマの数だけ構造が違うと思うので)。
多くのテーマは、時刻まで表示させるものは少ないので、1日毎のキャッシュ削除とかに設定してあれば問題ないんだと思います。
carl 件のいいね!