WordPress自动刷新又拍云CDN缓存发表文章提交评论

如果你的网站使用了又拍云CDN,如果你对文章页进行了CDN缓存。那么,你肯定需要看这篇文章。

一、前言

许多wordpress站点使用了又拍云CDN,同时进行了全站缓存,或者对文章页进行了缓存以提升网站速度。肯定遇到过这么一个问题,当你发表或更改了某篇文章、当文章有了新评论,用户看到的页面还是以前的页面、新的评论还是没有显示。

那是因为CDN上的缓存还未过期,不会马上刷新该页面的缓存。此时,你可以到又拍云控制台填写你想更新的链接,但这未免太过麻烦。

又拍云提供了开放API,我们可以通过API实现自动提交更新缓存的请求,这样就可以实时更新缓存了。

二、具体工作

1、创建Token

首先,你必须先创建一个又拍云API Token,相当于一串秘钥。此前,我写了一篇《PHP创建又拍云开放接口TOKEN实例》,可以参考。如果你想学习更多又拍云开放API的操作,可以查看我写的专题:又拍云操作笔记

注意:Token的权限(Scope)必须是cacheglobal

2、部署代码

将下面的代码放在主题目录下的functions.php文件中,并在$token填写你上一步骤创建的Token值。

/**
* 作者:语云博客
* 文章地址:https://www.eyuyun.com
* 转载请保留出处,谢谢合作!
**/

//更新或发布文章刷新本文和首页CDN缓存
add_action('publish_post', 'Clean_By_Publish', 0);
//提交评论刷新本文CDN缓存
add_action('comment_post', 'Clean_By_Comments',0);
//评论被审核刷新本文CDN缓存
add_action('comment_unapproved_to_approved', 'Clean_By_Approved',0);

//发布文章刷新CDN缓存函数
function Clean_By_Publish($post_ID){
    $url = get_permalink($post_ID);
    //清理首页和文章页面,用换行符\n进行拼接
    $urls =  home_url()."\n".$url;
    CurlPurge($urls);
}
//提交评论刷新CDN缓存函数
function Clean_By_Comments($comment_id) 
{
    $comment = get_comment($comment_id);
    $urls = get_permalink($comment->comment_post_ID);
    CurlPurge($urls);
}
//评论被审核刷新CDN缓存
function Clean_By_Approved($comment)
{
    $urls = get_permalink($comment->comment_post_ID);
    CurlPurge($urls);
}

//POST请求主函数
function CurlPurge($urls)
{
    $token ='有权限的Token';
    $headers = array(
        'Authorization: Bearer '.$token,
        'Content-type:application/json;charset=utf-8',
        );
    $data=json_encode(array(
      "urls"=> $urls
               ));
    $url = 'https://api.upyun.com/purge';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$headers);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}

三、测试效果

此时代码以部署完成,尝试发表或修改文章、发布新的评论,然后到又拍云控制台查看log日志:

评论

Your email address will not be published. Required fields are marked *

Scroll Up