WordPress自动生成首页静态缓存集成到主题
发布时间:2025-10-19 15:49:19 本站作者 【 字体:大 中 小 】 浏览:49 次
继前篇WordPress自动生成首页静态缓存之后 首页缓存几大问题已经基本解决。下面是把这个方法集成到主题里面,可以做成插件,以下是自定义函数版本,将下面的代码添加到主题的functions.php里面之后即可生效:
/**
* 首页缓存版
* 缓存于网站根目录/cache文件夹
* by INLOJV.com
*/add_action( 'init', 'homeCache' );function homeCache(){
// 只缓存首页
define('CACHE_FOLDER', ABSPATH.'/cache'); // 根目录/cache/ 文件夹
define('CACHE_DIR', ABSPATH.'/cache/'.$_SERVER['HTTP_HOST']); // 缓存目录 —— cache.php所在目录/cache/服务器域名
define('CACHE_CYC', 86400); //缓存文件的周期,单位秒,86400秒是一天,到期则清除
define('CACHE_SUFFIX','.html'); //缓存文件的后缀,不要用 .php .asp .jsp .pl 等
//首页以index.html缓存
if($_SERVER['REQUEST_URI'] == '/'){ // 如果请求的是首页
$file_name = "index".CACHE_SUFFIX; // 文件名为 index+后缀
$cache_dir = CACHE_DIR; // 缓存路径赋值
}
else { // 如果不是首页
return false; //终止, 下面的代码就不需要执行了。
}
$cache_file = $cache_dir.'/'.$file_name; // 缓存文件
$backlist = '/(?s=|%|feed|map|page|404|xml|txt|tag|author)/'; // 缓存链接黑名单:黑名单中的字符将不被缓存,若要添加更多请用分隔符 | 隔开:
if($_SERVER['REQUEST_METHOD']=='GET' && !preg_match_all($backlist,$_SERVER['REQUEST_URI'],$matches)){ // 若是GET请求 并且不在黑名单中
if(file_exists($cache_file) && time() - filemtime($cache_file) < CACHE_CYC){ //如果缓存文件存在,并且没有过期,就把它读出来
$fp = fopen($cache_file,'rb'); // 以只读方式打开缓存文件
fpassthru($fp); // 返回缓存文件字符数
fclose($fp); // 关闭缓存文件
exit();
}
elseif(!file_exists(CACHE_FOLDER)){ // 若cache文件夹不存在
mkdir(CACHE_FOLDER,0777); // 创建cache文件夹,权限设置为777
chmod(CACHE_FOLDER,0777); // 检查cache文件夹权限是否为777
mkdir(CACHE_DIR,0777); // 创建缓存目录,权限设置为777
chmod(CACHE_DIR,0777); // 检查缓存目录权限是否为777
}
elseif(!file_exists(CACHE_DIR)){ // 若缓存目录不存在
mkdir(CACHE_DIR,0777); // 创建缓存目录,权限设置为777
chmod(CACHE_DIR,0777); // 检查缓存目录权限是否为777
}
function auto_cache($contents){ //函数:自动缓存,当程序结束时自动调用此函数
$auto_cachefiles = CACHE_DIR."/index".CACHE_SUFFIX; // 重新赋值缓存文件
$fp = fopen($auto_cachefiles,'wb'); // 以可写方式打开缓存文件
fwrite($fp,$contents); // 写入缓存文件
fclose($fp); // 关闭缓存文件
chmod($auto_cachefiles,0777); // 检查缓存目录权限是否为777
clean_old_cache(); //生成新缓存的同时,自动删除所有的旧缓存
return $contents;
}
function clean_old_cache(){ // 函数:清理旧缓存
chdir(CACHE_DIR); // 指定需要清理的目录
foreach (glob("*/*".CACHE_SUFFIX) as $file){ // 遍历所有满足后缀的文件
if(time()-filemtime($file)>CACHE_CYC){ // 大于缓存时间周期的
unlink($file); // 删除文件
}
}
}
ob_start('auto_cache'); // 执行 auto_cache 缓存函数
}
else{
if(file_exists($cache_file)){ // file_exists() 函数检查文件或目录是否存在。
unlink($cache_file); // 若不是GET的请求则删除缓存文件。
}
}}// 发布、更新文章时,删除首页缓存add_action('publish_post', 'DelHomeCache');add_action('delete_post', 'DelHomeCache');add_action('post_updated', 'DelHomeCache');add_action('publish_page', 'DelHomeCache');function DelHomeCache($post_ID){
$home_cache = ABSPATH ."/cache/".$_SERVER['HTTP_HOST']."/index.html"; // ABSPATH 为根目录服务器绝对路径常量
if (file_exists($home_cache)) {
unlink($home_cache);
}}添加之后 什么都不用做,只需要刷新首页即可在根目录自动创建cache文件夹进行缓存,每次文章有任何更新缓存也会跟着更新,非常方便。
前端JS手动删除缓存
POST对象
主题目录下新建一个mod文件夹,并在mod里面新建一个delCache.php文件,加入以下代码
<?php// 前端通过JS手动缓存清理代码 BY INLOJVif(isset($_POST@['action'])) { // POST传参对象
if($_POST@['action'] == 'delcache'){ // 前端js通过POST方法传过来的值
// 缓存文件 —— 根目录/cache/服务器域名/index.html —— 必须用dirname()获取,路径自行修改。
$cachefile = "../../../../cache/".$_SERVER['HTTP_HOST']."/index.html";
if (file_exists($cachefile)) { // 若存在缓存文件
unlink($cachefile); // 删除该文件
}
}
return false;}?>
JS控制
点击事件绑定的元素id或class修改为你自己的
// 用ajax方法向根目录delCache.php传值删除静态缓存,手动更新首页html静态缓存$(document).on('click', 'svg.icon-list', function() { // 点击class为svg.icon-list的元素
$.ajax({
url: theme_dir + 'mod/delCache.php', //请求对象所在的url:delCache.php 。路径不要搞错
type: 'POST',
data: {
"action": "delcache"// 传参
},
cache: false,
error: function(){
alert('发生意外错误,请联系管理员。');
return false;
},
success:function(){
alert('Success,请手动刷新页面!');
//location.reload(true);
}
});});这样就OK了,最后要注意:POST对象文件和本篇前半部分的生成缓存的函数两段代码不能放在一起,否则会失效。
热门推荐
最新发布
Office2024激活密钥分享,2026年Office 2024专业增强版密钥分享
Office2024激活密钥分享:2026年Office 2024专业增强版密钥分享产品密钥:604C7-MN692-PBMVK-7GYQ8-Q7DTD类型描述:Office_ProPlus2024VL_MAK_AE2错误代码:在线密钥剩余次数:138288产品密钥:XYNT8-B0HK4-3VHM-T8PHJ-4VY20类型描述:Office_ProPlus2024VL_MAK_AE2错误代码:在线密钥剩余次数:138288产品密钥:74]MX-0NM6T_YDVF2-P...
visio 2016 永久激活密钥 visio 2016专业版激活码 正版 visio 2016 零售版产品密钥
有用户找小编要最新 visio 2016 激活密钥,visio 2016 是一个独立组件,如果安装了正版 visio 2016 专业版,需要 visio 专业版 2016 密钥激活。激活 visio 2016 有两种秘钥,一种是 visio 2016 永久激活码,一种是 visio2016 kms 安装密钥,kms 激活密钥是半年期限,但是永久免费使用。这边小编为...
office2016专业增强版密钥,office2016专业版激活秘钥分享(亲测可用)
office2016专业增强版是一款办公必备软件,而在安装完成之后,都是需要通过官方提供的激活密钥来进行激活认证,但是如果没有激活的话只有30天试用期,期限一过就不能用了,为此,小编这就给大家分享一下office2016专业增强版激活密钥及最新激活码供大家参考,同时支持32位和64位。说明:因为密钥的特性不能保证100%激活,此...
Office2016激活密钥,Office2016专业版/家庭和学生版密钥
Office2016是现在大家主要使用的Office版本,当然了在安装完成之后最重要的是激活,网上有非常多的Office2016激活具,但是如果你不喜欢KMS激活,那么可以看看这里有没有你需要的Office2016永久激活MAK KEY密钥。本站时刻保持更新。<img alt="【最新】Office2016激活密钥" office2016专业版="" 家庭和...
大家都在看
Office2024激活密钥分享,2026年Office 2024专业增强版密钥分享

visio 2016 永久激活密钥 visio 2016专业版激活码 正版 visio 2016 零售版产品密钥

office2016专业增强版密钥,office2016专业版激活秘钥分享(亲测可用)

Office2016激活密钥,Office2016专业版/家庭和学生版密钥

2026最新office2016专业版永久激活密钥/序列号,office2016专业版激活秘钥分享推荐

office2016专业增强版永久激活密钥,office2016专业版激活秘钥怎么用

office2016怎么激活密钥?office2016激活秘钥怎么使用

个人支付宝实名账号出售|v2/v3支付宝账号出售|实名支付宝购买

Office2024激活密钥分享_2025年永久激活密钥分享及激活工具分享

office2022激活密钥免费激活2026新版

