WP Discourse コメントの Webhook が WP Rocket キャッシュをリフレッシュしない

WordPressでページキャッシュをどのように処理しますか?

サイトではWP-Rocketを使用していますが、ページキャッシュ(Cloudflare APOのみを使用している場合も同様の問題)がコメント数を更新できなくしています。WP-Rocket(またはAPO)を無効にして、対応するフォーラム投稿に返信を投稿したところ、コメント数は更新されましたが、不安定でした。つまり、即時ではなく、予想されるようなものではありませんでした。

そこで、Webフックを追加するヒントを見つけ、これによりコメント数が確実に更新されるようになりました。

しかし、ページキャッシュ(WP-RocketまたはAPO)がオンになっていて、そのWebフックを使用している場合、新しい返信がフォーラムに投稿されてもコメント数は更新されません。

要するに、WebフックがWP環境を適切にトリガーしてキャッシュされたページの更新をトリガーしていないようです。マトリックスにグリッチがあるのかもしれません。:grinning_face_with_smiling_eyes:

編集: もう一点。WordPressにログインしているときはページがキャッシュされないようにWP-Rocketを設定しています。訪問者のみです。WordPressにログインしているときはコメント数が更新されているのがわかりますが、プライベートブラウザモードの訪問者としては更新されているのがわかりません。

「いいね!」 1

回答はありませんが、ご存知の通りWP Rocketは静的コピーを作成し、PHPとデータベースの呼び出しを排除しようとしています。それ自体はキャッシュではありませんが、定義の問題ではあります。\n\nしかし、WP Rocketは現在多くの問題を抱えており、WordPressサイト自体を考えると、これはおそらく最も些細な問題の1つでしょう。\n\n[quote="Brandon007, post:1, topic:236700"]\nWordPressにログインしているとき、ページは私にとってキャッシュされません\n[/quote]\n\nまあ、そのように機能するはずです。

Brandon007さん、問題の説明ありがとうございます。理解したところによると、以下のようになります。

  • WP Discourseプラグインはコメント数を正しく更新しています。
  • コメント数が更新されたときにWP Rocketのキャッシュがクリアされていません。

投稿のタイトルを「WP Discourse Plugin Not Updating Comment Count」から「WP Discourse comment webhook does not trigger a WP Rocket Cache refresh」に変更しました。

根本的な回答としては、これは予期された動作です。WP DiscourseプラグインはWP Rocketとの特別な連携はなく、近い将来に追加する予定もありません。

しかし、コメント同期Webhookコールバックがトピックメタデータ(コメント数が保存されている場所)を更新した後にトリガーされるアクションを追加することで、ここでお手伝いできます。その後、必要に応じてキャッシュクリアを実行する独自のアクションコールバックを作成できます。それはあなたの状況で機能しますか?

「いいね!」 3

@Angus わかりました!

コーディングは迷走するかもしれませんが、可能であれば、私や他のユーザーを正しい方向へ一歩進めることができます。あなたの修正により、ユーザー側で任意のキャッシュプラグインのキャッシュをクリアするためのコードを追加できるようになるということですね。それは、特定の製品に焦点を当てるよりもさらに良いことです。開発サイトでいくつかのキャッシュ方法を試しましたが、いずれも同じ結果でした。

では、頑張ってください。返信ありがとうございました。

アンガスさん、こんにちは。まだこの件について調べているか分かりませんが、他に付け加えたいことがあります。ネイティブのWordPressで、ページキャッシュを使用している場合、コメントが残されるとページキャッシュは自動的に削除されます。WP Discourseでこの動作を模倣する方法はありませんか?

WP Rocket ではそうなりません。WP Rocket はコメントを動的なまま保持します。本来あるべき姿です。

Brandonさん、はい、この件については対応するアクションが用意されます。次回のリリースでは、このシナリオでWP Rocketキャッシュ(または他のキャッシュ)をクリアできるようになります。

スキルや知識を疑っているわけではありませんが、「またはキャッシュ」といったものはありません。なぜなら、私の知る限り、WP RocketはW3 Total Cache、WP Fastest Cache、またはVarnishやNginxのようなリバースプロキシとは異なるツールでキャッシュをパージする必要があるからです。

もしWP Rocketがコメントセクションからページの静的要素、つまりキャッシュを作成しているのであれば、パージよりもはるかに大きな問題があります。

その通りです。WP Discourseプラグインは、異なるキャッシュソリューションを使用しているサイトが、使用されているキャッシュソリューションに適した方法で、適切なタイミングでキャッシュをパージできるようにするアクションを提供するだけです。

「いいね!」 1

アンガス、フォローアップありがとうございます。リリース日はいつ頃になりそうですか?

また、WP-Discourse はネイティブの WordPress コメントの動作を模倣することは可能でしょうか?単純に、ページキャッシュソリューションにはオプションがあり、ユーザーがそのページに新しいコメントを残したときにページキャッシュをクリアできるようにします。これは理想的です。

ご存知の通り、現時点では、コメント数をインクリメントさせたい場合、どのような種類のページキャッシュも使用できません。これは、速度最適化に関心のある WordPress ユーザーにとって大きな欠点です。

そうならないことを願っています。そのような動作はリソースの無駄遣いであり、実際には取引を成立させない可能性が高いからです。

ネイティブのWordPressにはキャッシュがなく、WP Rocketはコメント後にいわゆるキャッシュ全体を削除するわけではないので、まだ少し混乱しています。

上記で言及したアクションは、現在リリース準備中の 2.4.6 に追加される予定です。

このアクションには、Webhookによって更新されたWordPress投稿のIDが引数として渡されます。つまり、

do_action( 'wpdc_after_webhook_post_update', $post_ids );

詳細は以下をご覧ください。

「いいね!」 4

追記ですが、アップデートで問題が解決しました!ありがとうございます。:+1:t3:

WP-Rocket と WP-Discourse を併用している場合にこの問題が発生した方へ。以下のコード(WordPress の関数ファイルに挿入してください)は、対応する Discourse の投稿にコメントが作成された際に、その投稿のキャッシュを削除することを保証します。

if( function_exists( 'rocket_clean_post' ) ){
	add_action( 'wpdc_after_webhook_post_update', 'bulk_rocket_clean_post’);
}

function bulk_rocket_clean_post(array $ids){
    foreach ($ids as $id) {
        rocket_clean_post($id);
    }
}
「いいね!」 3