tekod/wp-cache-controller

WordPress库,用于自动失效的任意数据缓存。

1.1.1 2024-01-31 11:26 UTC

This package is auto-updated.

Last update: 2024-09-30 01:52:07 UTC


README

License: MIT Issues

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