WordPress 下纯代码实现文章发布、更新后自动清理 CloudFlare 缓存

为什么新发布了文章或者修改了文章后网站首页会不能事实的同步更新?这个其实是因为客户在设置CloudFlare 缓存时候边缘 TTL缓存时间过长以及浏览器 TTL缓存时间造成的,解决起来其实很简单,要网站首页保证事实更新状态,只需要让浏览器 TTL【绕过缓存】,也就是不在CloudFlare里设置浏览器 TTL 的缓存时间,直接绕过即可,这样首页就能及时更新显示最新文章了。

大家可以理解为边缘 TTL 指的是缓存在 CloudFlare 的 CDN 节点 IP 服务器上的浏览器 TTL 指的是客户自己浏览器缓存到本地(因为所有浏览器无论是 PC 版还是手机版都支持根据传递的缓存头来缓存数据到本地),CDN 节点 IP 服务器上的缓存就是能起到让访客速度均衡的目的,无论访客身处哪里都可以直接就近获取 CDN 节点 IP 上的缓存浏览(也就是不受网站服务器所在地的跨区域网络请求限制),而浏览器本地缓存起到的就是加速访客浏览速度,直接都在本地调用了,速度当然也就提升了。因为浏览器缓存是存储在本地的(客户使用的设备上,如:手机、平板、PC 等),所以我们是没有权限帮助客户清理的,自然就会存在因为本地缓存的原因造成访客访问不到实时的更新,所以如果你网站更新频繁,首页有保持实时更新的需求,那么就建议不让浏览器缓存,也就是 CloudFlare 里的【绕过缓存】。而边缘 TTL 也就是 CDN 节点上的缓存,我们是可以通过清理CDN 缓存来强制回源请求更新的。

今天就给大家分享一个在 WordPress 上只要发布了新文章或者重新编辑更新了某个文章后就自动清理 CloudFlare 各个节点 IP 上的缓存(其实就是让 CDN 节点 IP 回源重新请求并缓存一次)的代码,这要感谢 CloudFlare 提供了强大又完善的 API 供大家免费使用,废话不多说了,直接上代码:

/*当有新文章发布或者编辑更新文章的时候自动清理 CloudFlare 首页和对应文章链接缓存。*/
function mydl_clear_cloudflare_cache($post_id) {
    // 获取文章的 URL
    $post_url = get_permalink($post_id);
    // 获取首页的 URL
    $home_url = home_url('/');
    // CloudFlare API 信息
    $api_key = 'your_Global API Key';
    $email = 'your_email';
    $zone_id = 'your_zone_id';
    // 要清理的 URL 列表
    $urls = array($post_url, $home_url);
    // 清理缓存的 API 请求
    $response = wp_remote_post("https://api.cloudflare.com/client/v4/zones/{$zone_id}/purge_cache", array(
        'method' => 'POST',
        'headers' => array(
            'X-Auth-Email' => $email,
            'X-Auth-Key' => $api_key,
            'Content-Type' => 'application/json',
        ),
        'body' => json_encode(array(
            'files' => $urls,
        )),
    ));
    // 检查 API 响应
    if (is_wp_error($response)) {
        error_log('CloudFlare 缓存清理无效: ' . $response->get_error_message());
    } else {
        error_log('已经清理了 CloudFlare 缓存链接: ' . implode(', ', $urls));
    }
}
// 钩子函数,在文章发布或更新时调用
add_action('save_post', 'mydl_clear_cloudflare_cache');

 

上述代码大家可以放到当前主题的 function.php 文件里,如果担心主题更新造成代码都是,可以参考【如何方便的在更新主题时保留 Functions.Php 里的自定义】一文的方法制作一个自己专属的插件来管理自定义代码。

要注意的是上述代码是需要提供当前站点 CloudFlare 账户的 Global API Key、账号邮箱地址、以及对应网站区域 ID(Zone_ID)的

Global API Key:可以在 CloudFlare 后台【概述】点击右边底部【获取您的 API 令牌】在【API 密钥】里查看到的。

账号邮箱:就是你注册 CloudFlare 账号时的邮箱地址。

区域 ID:就是 CloudFlare 后台站点【概述】右边显示的区域 ID 也叫 Zone ID。

上述三个,一定要确定跟你当前 CloudFlare 账号和网站是一一对应的,否则会无效的!记得添加完代码,重启一下服务器上的 php-fpmj 进程。然后当你再新发布文章或者修改某个文章的时候此代码就会自动的帮你清理 CloudFlare 上首页缓存以及对应文章页的缓存了,当然如果甚至了【浏览器 TTL】本地缓存,那还得等这个缓存时间更新后才能呈现在前端的,切记切记了。反正明月是习惯的给【浏览器 TTL】设定了两个小时的缓存,毕竟这会让网页尤其是首页载入速度大幅提升,再说两个小时后就会自动更新请求了,自己的博客也没有两个小时就要发布新文章的频率。

文章版权归原作者所有或来自互联网,未经允许请勿转载。如有侵权请联系我删除,谢谢!
THE END
分享
二维码
打赏
< <上一篇
下一篇>>
文章目录
关闭
目 录