WordPress实现发布/更新文章、提交/审核评论自动清理VeryCloud缓存教程

下面分享一下部署方法。
PHP

/**
* WordPress 发布/更新文章、提交/审核评论自动清理VeryCloud CDN缓存(首页、分类以及当前文章) By 张戈博客
*
* 转载请保留出处,谢谢合作!
**/
 
//发布、更新文章刷新缓存
add_action('publish_post', 'refresh_By_Publish', 0);
//提交评论刷新缓存
add_action('comment_post', 'refresh_By_Comments',0);
//审核评论刷新缓存
add_action('comment_unapproved_to_approved', 'refresh_By_Approved',0);
 
define('CRYPT_SALT', 'verycloud#cryptpass');
$cdn_provider = array(
 "verycdn" => array(
  "push" => "https://api3.verycloud.cn/API/cdn/refresh",
  "token" => "https://api3.verycloud.cn/API/OAuth/authorize",
  "username" => "此处填写verycloud用户名",
  "password" => "此处填写verycloud密码",
 ),
);
 
//发布文章更新文章、分类和首页的缓存函数
function refresh_By_Publish($post_ID)
{
    $pageurl    = get_permalink($post_ID);
    $homeurl    = home_url();
   
    $category   = get_the_category();
    if($category[0]){
        //如果文章属于多个分类,默认只刷新第一个分类地址
        $caturl = get_category_link($category[0]->term_id );
        $url    = $pageurl . ',' . $caturl . ',' . $homeurl;
    } else {
        $url    = $pageurl . ',' . $homeurl;
    }
   
    $data = array(
  'type' => 'file',
  'urls' => $url
 );
    refresh($data);
}
 
//提交评论刷新当前文章CDN缓存
function refresh_By_Comments($comment_id)
{
    $comment = get_comment($comment_id);
    $url = get_permalink($comment->comment_post_ID);
   
    $data = array(
  'type' => 'file',
  'urls' => $url,
 );
    refresh($data);
}
 
//审核评论刷新当前文章CDN缓存
function refresh_By_Approved($comment)
{
    $url = get_permalink($comment->comment_post_ID);
    $data = array(
  'type' => 'file',
  'urls' => $url,
 );
    refresh($data);
}
 
function post_data($url, $data, $type = "POST") {
    $ch = curl_init();
 
    // 使用TLS1.0
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSLVERSION, 1); //CURL_SSLVERSION_TLSv1 
 
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 1 );
    curl_setopt($ch, CURLOPT_POST, true);
 
    if ( $type == "POST" ) {
 $parm_string = http_build_query($data, '&');
 curl_setopt($ch, CURLOPT_POSTFIELDS, $parm_string);
    } else {
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    }
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}
 
//生成tokens
function get_verycdn_token() {
 global $cdn_provider;
 $post_data["username"] = $cdn_provider["verycdn"]["username"];
 $post_data["password"] = encrypt($cdn_provider["verycdn"]["password"]);
 
 $res = post_data($cdn_provider["verycdn"]["token"], $post_data);
 
 $result = json_decode($res);
 return $result->access_token;
 //var_dump($post_data);
 //var_dump($result);
}
 
function encrypt($txtStream) {
        //以下行中的字符串可能需要找客服提供,具体请自行试试。
 $lockstream = 'st=lDEFABCNOPyzghi_jQRST-UwxkVWXYZabcdefIJK6/7nopqr89LMmGH012345uv';
 $lockLen = strlen($lockstream);
 $lockCount = rand(0, $lockLen-1);
 $randomLock = $lockstream[$lockCount];
 $password = md5(CRYPT_SALT . $randomLock);
 $txtStream = base64_encode($txtStream);
 $tmpStream = '';
 $i = 0; $j = 0; $k = 0;
 for($i = 0; $i < strlen($txtStream); $i++) {
  $k = ($k == strlen($password)) ? 0 : $k;
  $j = (strpos($lockstream, $txtStream[$i]) + $lockCount + ord($password[$k])) % ($lockLen);
  $tmpStream .= $lockstream[$j];
  $k++;
 }
 return $tmpStream . $randomLock;
}
 
/**
* 提交刷新
* @param $data
* @return array
*/
function refresh($data) {
   global $cdn_provider;
    $token = get_verycdn_token();
    if(!$token) {
      return array(
        'code' => 0,
        'message' => 'unable to get token'
      );
    }
    //刷新类型 file 文件 dir 目录
    $type = isset($data['type']) && !empty($data['type']) ? trim($data['type']) : '';
    //刷新url
    $urls = isset($data['urls']) && !empty($data['urls']) ? $data['urls'] : '';
    //url分隔符,多个url使用该符号分隔,默认,
    $partition = isset($data['partition']) && !empty($data['partition']) ? trim($data['partition']) : ',';
    if(empty($type) || empty($urls)) {
      return array(
        'code' => 0,
        'message' => 'type and urls are required',
      );
    }
 
    $url = $cdn_provider["verycdn"]["push"];
 
    $send_data = array(
      'token' => $token,
      'type' => $type,
      'urls' => $urls,
      'partition' => $partition
    );
 
    $return = post_data($url, $send_data);
    return $return;
}
将以上代码粘贴到WordPress主题functions.php中,然后将 19,20行对应的中文改成VeryCloud的用户名和密码,保存即可。
Ps:貌似VC的缓存刷新API暂时还没完全公开,如果需要部署这个功能,需要联系客服,然后告知需要使用这个刷新CDN缓存的API,然后提供以下用户名给他就好了。而且代码中的lockstream的值可能需要VC客服提供,如果发现上述代码无法成功,请自行咨询VC客服。
部署好了之后,可以去更新文章或提交评论,然后登陆VeryCloud云分发后台,即可看到提交记录

文章地址:https://zhangge.net/5090.html

时间: 2024-08-01 12:21:26

WordPress实现发布/更新文章、提交/审核评论自动清理VeryCloud缓存教程的相关文章

xcode APP 打包以及提交apple审核详细流程(新版本更新提交审核)

向导: 必备IDP证书和distribution证书(第一个证书是真机部署测试时用到的,后者证书是发布时需要用到的,缺一不可). 我就说说接下来应该做的流程.在你保证拥有以上两个证书的前提下,距离app提交审核,已经剩下两大步了:1,ituneconnect创建app,填写项目详细信息.2,xcode打包验证通过,提交项目.好的,我就开始说重点了,童鞋们跟着我的流程走,保证不会迷糊和出错. 1.预先准备 在你开始将程序提交到App Store之前,你需要有一个App ID,一个有效的发布证书,以

wordpress更新文章实时推送到百度教程

百度最近在站长平台里发布了公告,决定停用现在的百度sitemap1.0,使用了新的推送方式,也就是今天的主角:主动推送(实时). 文章实时推送到百度教程-wordpress 实时推送"> 那么先前安装的wordpress插件也可以卸载了,申请了百度实时推送的接口. 首先给出申请地址:http://zhanzhang.baidu.com/linksubmit/ 大家前去了解下百度新的主动推送机制! 然后,结合本站团队成员维维大神的研究测试,且免去安装WP BaiDu Submit插件的实现了

WordPress中限制非管理员用户在文章后只能评论一次_php技巧

之前有网友提出,在WordPress中有没有办法实现每篇文章只允许用户评论一次? 暂不说这个需求有没有用,毕竟WordPress就是给有各种需求的人用的.这个功能实现起来也比较简单,只需每次用户发表的评论进数据库之前,从当前文章的所有评论中查找是否有相同的用户名或邮箱已经发表过评论,如果有就跳到错误页面即可. 实现代码,放到当前主题的functions.php中即可(这里还增加了对IP的判断,更保险): // 获取评论用户的ip,参考wp-includes/comment.php functio

WordPress中实现每篇文章只允许用户评论一次

之前有网友提出,在WordPress中有没有办法实现每篇文章只允许用户评论一次? 暂不说这个需求有没有用,毕竟WordPress就是给有各种需求的人用的.这个功能实现起来也比较简单,只需每次用户发表的评论进数据库之前,从当前文章的所有评论中查找是否有相同的用户名或邮箱已经发表过评论,如果有就跳到错误页面即可. 实现代码,放到当前主题的functions.php中即可(这里还增加了对IP的判断,更保险):  代码如下 复制代码 // 获取评论用户的ip,参考wp-includes/comment.

利用AJAX实现WordPress中的文章列表及评论的分页功能_javascript技巧

文章列表页分页 一.加载 jQuery 库既然是 jQuery 驱动的 Ajax ,加载 jQuery 库是必须的. 二.文章列表格式在你的文章列表页面(首页 index.php.归档 archive.php )需要确保有以下类似的结构 <!-- 包含所有文章的容器 --> <div id="content"> <!-- 各文章的容器 --> <div class="post"></div> <div

WordPress发布新文章自动邮件通知注册用户

在当前的WordPress主题目录下的functions.php中,添加以下php代码:  代码如下 复制代码 function newPostNotify($post_ID) {      if( wp_is_post_revision($post_ID) ) return;        global $wpdb;      $get_post_info = get_post($post_ID);      if ( $get_post_info->post_status == 'publi

WordPress显示即将发布的文章列表的教程

如果为新文章设置了定时发布,是否想在显著的位置放个提示,告诉读者马上将会有什么文章发布,可能会帮助你的博客获得更多的关注,这里有两种方法可以实现上述功能. WordPress显示即将发布的文章列表 方法一:将下面代码添加到主题模板适当的位置即可. <ul> <?php $my_query = new WP_Query('post_status=future&order=DESC&showposts=10&ignore_sticky_posts=1'); if ($

纽约时报使用谷歌的人工智能审核评论

在一个完美的世界中,新闻网站上的评论区应该是对世界上发生的各种事情进行理性讨论的好地方.不幸的是,我们并没有生活在一个完美的世界里,各种激烈尖锐的争论和谩骂经常会让网站选择完全关闭评论,而不是处理它们. <纽约时报>正在试图通过使用人工智能来解决这个问题.今天,<纽约时报>推出了一个新的人工智能评论审核功能,该功能使用了Perspective,这是一个由Jigsaw构建的人工智能应用程序编程接口,Jigsaw是谷歌公司的母公司阿尔法集团退出的智囊团.<纽约时报>表示,这

Linux中svn提交文件后自动同步更新到网站目录

 下面来为各位介绍Linux中svn提交文件后自动同步更新到网站目录希望文章对各位有帮助.     有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkout代码,例如我的目录是/data/www/test svn co https://127.0.0.1/test/trunk/ /data/www/test/ 注意,这是因为有时我会在服务器上直接修改代