WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存
时间:2022-05-05
本文章向大家介绍WordPress发布/更新文章、提交/审核评论自动清理VeryCloud缓存,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
上一篇文章分享了WordPress 发布文章评论自动刷新腾讯云 CDN 的教程,而博客现在还用到了 VeryCloud 的 CDN,正好有朋友在文章后面留言说 VC 也有刷新缓存的 API,于是就利用中午的时间折腾了下,成功搞定!
下面分享一下部署方法。
/**
* WordPress 发布/更新文章、提交/审核评论自动清理VeryCloud CDN缓存(首页、分类以及当前文章) By 张戈博客
* 文章地址:https://zhangge.net/5090.html
* 转载请保留出处,谢谢合作!
**/
//发布、更新文章刷新缓存
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 云分发后台,即可看到提交记录:
至此,说明你已部署成功。
- HDUOJ-------2719The Seven Percent Solution
- Golang记录、计算函数执行耗时、运行时间的一个简单方法
- uva----11729 Commando war (突击战争)
- uva-----11292 The Dragon of Loowater
- golang简单位运算示例
- 学编程,学单词.....在学习中积累自己的单词(不断更新__ing)
- 初学java之事件响应(结合接口来设置在同一个界面上!)
- 初学java之触发响应事件举例子
- 初学java之(盒子分布)
- java(课程设计之记事本界面部分代码公布)
- HDUOJ---1236 排名(浙大考研题)
- HDUOJ----1234 开门人和关门人(浙江大学考研题)
- HDUOJ----2571(命运)(简单动态规划)
- 初学java之面板布局的控制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- k8s 之yaml文件基本格式
- 你可能不知道的pandas的5个基本技巧
- Node 脚本遭遇异常时如何安全退出
- flutter Running Gradle task 'assembleDebug'
- 如何使用 docker 高效部署 Node 应用
- fish-redux框架路由配置报错问题
- Flutter fish-redux 简单使用
- Flutter 项目.gitignore配置
- js和object的常见操作,持续更新中...
- 常见编程模式之快慢指针
- python pywifi模块——暴力破解wifi
- 面试题系列第3篇:Integer等号判断的内幕,你可能不知道?
- Go by Example 中文:工作池
- 推荐一款万能抓包神器:Fiddler Everywhere
- 猿实战04——el-upload结合nginx之通用图片处理