tekod / wp-cache-controller
WordPress库,用于自动失效的任意数据缓存。
Requires
- php: >=7.0.0
README
WpCacheController
WordPress库,用于自动失效的任意数据缓存
WpCacheController是WordPress库,用于自动失效的任意数据缓存。它是框架无关的,因此不需要其他包即可正常运行。
此库不断更新日志和统计记录,以告知管理员缓存使用情况。
有管理员仪表板设置页面,管理员可以在此启用/禁用缓存功能,并查看日志记录和统计信息。
此库的典型用途是替换需要多次访问数据库以准备HTML内容的代码块,例如:导航块、分类树、页脚、最新博客文章块、相关产品块等。
用法
将此代码放入您主题的"functions.php"中以初始化控制器,其中参数是配置文件的路径
use Tekod\WpCacheController\CacheController;
require_once 'inc/WpCacheController/CacheController.php'; // optional if you use some autoloader
CacheController::Init(__DIR__.'/config/cachecontroller.config.php');
配置示例是此库的一部分。强烈建议在库目录外部克隆(并重命名)配置文件并在此处编辑内容,就像上面的代码一样。这样,您可以安全地更新库而不丢失配置。
这将从缓存中回显标识为“产品菜单”的HTML内容,如果没有,则包含模板
CacheController::Profile('eCommerce')->Output('product menu', function() {
get_template_part('template-parts/woocommerce_product_menu');
});
以下是如何向内部函数(闭包)传递参数以创建动态标识符的示例
CacheController::Profile('Shop')->Output('product-page-'.$ProductID, function() use ($ProductID) {
$Product= new MyProduct($ProductID);
$Title= $Product->GetTitle();
$Image= $Product->GetImage();
include 'shop/single-product.php';
});
与其回显内容,不如使用“Get()”仅返回任意数据,典型用例是用具有复杂SQL查询的数据库替换值的获取
$Data= CacheController::Profile('Movies')->Get('full-movie-data-'.$ID, function() use ($ID) {
return [
'Movie' => get_post($ID),
'Genres' => get_posts(['posts_per_page' => -1, 'post_type' => 'genre', 'tax_query' => [.....
'Actors' => get_posts(['posts_per_page' => -1, 'post_type' => 'actor', 'tax_query' => [.....
'Photos' => get_posts(['posts_per_page' => -1, 'post_type' => 'photo', 'tax_query' => [.....
....
];
});
注意:标识符必须只包含文件名安全字符(正则表达式:“A-Za-z0-9~_!&= |.-+”),确保这一点的最简单方法是通过md5函数传递它,如第32个参数
CacheController::Profile('IMDB')->Get(md5($URL), function() {...
第3个参数
Get和Output方法有第3个参数“OnCacheHit”,您可以在其中放置代码块(闭包),如果内容从缓存返回(意味着主闭包未执行),则应执行该代码块。
使用此功能的用例示例可以缓存包含ContactForm7短语的模板块,因为除了回显HTML之外,此插件还依赖于操作以包含一些JavaScript。使用第3个参数,您可以执行所有这些副作用以模拟正常环境并确保插件正常工作,在这种情况下:回显缺失的JavaScript代码。
MVC主题
此库非常适合MVC风格的主题,您可以使用闭包包装“模型”中的所有获取器,并通过Get()方法获取它们,就像在最后一个用例示例中一样。纯粹的简单性:从所有来源收集所有数据,并在单个调用中缓存它们。
安全问题
如果您发现了一个安全问题,请直接联系作者 office@tekod.com。