后台「主题设置」新增第十一个标签页(邮件通知之后、自定义代码之前), 只有三个输入框:CDN 地址、白名单、黑名单。地址留空即关闭功能。 实现(inc/theme-cdn.php,新增): - 输出缓冲挂在 template_redirect 优先级 1,改整页 HTML 的资源地址, 覆盖主题 enqueue 之外的文章图片、插件输出、区块图片。 - 规则按字面形态自动识别七种写法:* / 扩展名 / 扩展名列表 / 路径前缀 / 通配符 / 路径子串 / ~正则~。 - 单个纯字母词(jpg 与 uploads 分不出谁是扩展名)同时按扩展名与 路径子串匹配,两个含义互斥,避免 uploads 规则静默失效。 - 黑名单先于白名单判定;硬性排除不受两套名单影响:以 / 结尾、 页面/动态后缀、无扩展名、wp-admin/wp-json/wp-cron/xmlrpc/feed、 非本站域名、非 http(s) 协议。 - 后台/REST/AJAX/feed/cron/定制器预览/CLI 一律不改写。 - 查询串与锚点原样保留(?ver= 丢了会一直吃旧缓存)。 - 子目录站:判规则用完整路径,拼 CDN 时剥掉站点子目录。 - 写错的正则编译时丢弃,避免每个资源抛一条 warning 刷满日志。 验证: - inc/theme-cdn.php 逻辑探针 92/0,反向验证 21/0(M1~M15 逐条注入, 含 M5 拆成三条覆盖协议相对/绝对/整页三条分支,M10/M13 组合注入)。 - 后台探针 56/0(真实渲染 + 几何 + 类型 + 说明块),反向验证 15/0。 - 包契约 69/0,反向验证 23/0(改 zip 内字节,不改源码)。 - 旧探针回归:toc330 101/0、admin330 88/0、admin328 13/0、 pkgcheck331/332/333 全绿、e2e322/323 通过。 - 线上仅在 theme-update/ 发 zip + readme + update.json,未解包覆盖服务器主题目录。
74 lines
2.8 KiB
PHP
74 lines
2.8 KiB
PHP
<?php
|
||
/**
|
||
* 模板函数
|
||
* @author Yongquan Yang <yangyq.net>
|
||
* @license MIT License
|
||
* @version 2020.03.17
|
||
*/
|
||
|
||
define('THEME_VERSION', wp_get_theme()->get('Version'));
|
||
|
||
// 主题配置
|
||
require get_template_directory() . '/inc/options-framework/autoload.php';
|
||
|
||
// 自定义代码(CSS / JS,存选项表而非主题目录)
|
||
require get_template_directory() . '/inc/theme-custom-code.php';
|
||
|
||
// 更新配置
|
||
require get_template_directory() . '/inc/update-checker/autoload.php';
|
||
|
||
// 核心配置
|
||
require get_template_directory() . '/inc/theme-core.php';
|
||
|
||
// 图片类选项的默认值(Logo/favicon/404/分享图… 空值时落到包内默认图)。
|
||
// 必须排在 theme-core.php 之后:它要用 ASSET_PATH 与 kratos_option。
|
||
require get_template_directory() . '/inc/theme-option-defaults.php';
|
||
|
||
// 站点配置
|
||
require get_template_directory() . '/inc/theme-setting.php';
|
||
|
||
// 纪念日自动哀悼(按日期判断,需在 theme-setting 之后,
|
||
// 因为它用到 kratos_option)
|
||
require get_template_directory() . '/inc/theme-mourning.php';
|
||
|
||
// 哀悼说明页(固定路径 /memory,由主题判定路由,不写数据库)
|
||
require get_template_directory() . '/inc/theme-mourning-page.php';
|
||
|
||
// 文章配置
|
||
require get_template_directory() . '/inc/theme-article.php';
|
||
|
||
// 评论区(统一渲染 + AJAX + 评论通知)。
|
||
// 必须在 theme-article.php 之后:后者不再定义评论函数,
|
||
// 但评论模板 comments.php 里引用的 comment_callbacks 由本文件提供。
|
||
// 也必须早于 theme-mail.php(评论通知要调 yang_mail_render)。
|
||
require get_template_directory() . '/inc/theme-comments.php';
|
||
|
||
// 小工具配置
|
||
require get_template_directory() . '/inc/theme-widgets.php';
|
||
|
||
// 文章增强
|
||
require get_template_directory() . '/inc/theme-shortcode.php';
|
||
|
||
// 文章目录([TOC] 短代码)
|
||
require get_template_directory() . '/inc/theme-toc.php';
|
||
|
||
// 添加导航目录
|
||
require get_template_directory() . '/inc/theme-navwalker.php';
|
||
|
||
// 对象存储配置
|
||
require get_template_directory() . '/inc/theme-dogecloud.php';
|
||
|
||
// CDN 加速(地址改写:CDN 地址 + 白名单 + 黑名单)。
|
||
// 必须排在 theme-core.php 之后:它要用 kratos_option 与 wp_parse_url。
|
||
// 挂在 template_redirect 上开输出缓冲,所以本文件晚加载不影响生效。
|
||
require get_template_directory() . '/inc/theme-cdn.php';
|
||
|
||
// 邮件模板:必须先于 theme-mail.php 加载,
|
||
// 因为后者在发信时会调用 yang_mail_render()
|
||
require get_template_directory() . '/inc/theme-mail-template.php';
|
||
|
||
// 邮件治理:统一接管发信通道、去重、关掉重复通知
|
||
require get_template_directory() . '/inc/theme-mail.php';
|
||
|
||
// SMTP 配置(连通性相关,实际接管在 theme-mail.php)
|
||
require get_template_directory() . '/inc/theme-smtp.php'; |