WP Discourse评论webhook不会触发WP Rocket缓存刷新

在 WordPress 中,我们如何处理页面缓存?

我在我们的网站上使用 WP-Rocket,但页面缓存(仅使用 Cloudflare APO 也会出现同样的问题)阻止了评论数的更新。我通过禁用 WP-Rocket(和/或 APO)进行了验证,在相应的论坛帖子中回复后,评论数会更新,但更新不规律。也就是说,不是即时的,也不是你所期望的那样。

因此,我找到一个提示,可以添加一个 Webhook,这使得评论数能够可靠地更新。

然而,当页面缓存开启时(WP-Rocket 或 APO),并且使用该 Webhook,当有人在论坛中发布新回复时,评论数不会更新。

似乎,Webhook 没有正确触发 WP 环境来触发缓存页面的刷新。我们似乎遇到了一个“矩阵中的小故障”。:grinning_face_with_smiling_eyes:

编辑: 还有一点。我设置了 WP-Rocket,这样当我登录到 WordPress 时,页面就不会为我缓存。只为访客缓存。我注意到,当我登录到 WordPress 时,我可以看到评论数更新,但在私密浏览器模式下作为访客时,我看不到它们。

1 个赞

我没有任何答案,但如您所知,WP Rocket 正在尝试进行静态复制并消除 PHP 和数据库调用。它本身不是缓存,但当然——这是定义问题。

但 WP Rocket 现在有很多问题,考虑到 WordPress 网站本身,这也许是最微不足道的问题之一。

嗯,那样应该可以。

@Brandon007,感谢你解释你的问题。据我所理解:

  • WP Discourse 插件正在正确更新评论计数。
  • 更新评论计数时,WP Rocket 缓存没有被清除。

我已经将你的帖子标题从“WP Discourse 插件未更新评论计数”更改为“WP Discourse 评论 webhook 未触发 WP Rocket 缓存刷新”。

你问题的基本答案是这是预期行为。WP Discourse 插件没有与 WP Rocket 的任何特定集成,并且在可预见的未来也不会添加。

但我仍然可以通过添加一个在评论同步 webhook 回调更新主题元数据(评论计数存储在此处)后触发的操作来帮助你。然后,你可以编写自己的操作回调来执行你想要的任何缓存清除。这是否适合你的情况?

3 个赞

@Angus 你明白了!

我可能会在写代码时迷失方向,哈哈,但如果你能让它成为可能。这将使我和其他用户朝着正确的方向迈出一步。听起来,通过你的修改,它将允许用户添加代码来清除任何缓存插件的缓存。这比专注于一个产品要好得多。我在开发站点上尝试了几种缓存方法,它们的结果都一样。

所以,我的好先生,请继续,感谢你的回复。

嘿 Angus。我不确定这是否是你还在调查的事情?

另外我想补充一点。在原生的 WordPress 中,并使用任何形式的页面缓存。一旦留下评论,页面缓存就会自动清除。有没有办法让 WP Discourse 模仿这种行为?

不是 WP Rocket。它会动态保留评论,正如它应该的那样。

布兰登,是的,将有一个针对此的操作,允许您在下一个版本中清除 WP Rocket 缓存(或任何其他缓存)。

我不是在质疑你或任何人的技能,我什么都不知道,但不可能有什么“或任何缓存”,因为据我所知,WP Rocket 需要不同的工具来清除其缓存,而不是 W3 Total Cache,而不是 WP Fastest Cache,而不是像 Varnish 或 Nginx 这样的任何反向代理。

而且,如果 WP Rocket 从评论部分创建页面的静态部分(即缓存),那么问题就比清除要大得多。

That’s correct. The WP Discourse plugin will simply provide an action that will allow sites using different caching solutions to purge the cache at the appropriate time using whatever method is appropriate to the caching solution being used.

WP Discourse 插件将提供一个操作,允许使用不同缓存解决方案的站点在适当的时间使用适合所用缓存解决方案的任何方法来清除缓存。

1 个赞

Angus,感谢您的跟进。关于发布日期,您有什么大致的想法吗?

另外,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 个赞