Files
wordpress-kratos-yang/functions.php
T
laoyang ec815d4282 评论通知邮件无样式:接管核心通知正文 #39
卸载 wpDiscuz 后,评论通知回落到核心 wp_notify_postauthor /
wp_notify_moderator。theme-mail.php 只接管了通道(SMTP、From),
并把 Content-Type 强改成 text/html,而正文仍是核心拼的纯文本,
客户端按 HTML 渲染 ⇒ 换行丢、链接变裸地址。

新增 inc/theme-mail-core.php,挂 comment_notification_text /
comment_moderation_text 两个过滤器,把正文换成主题模板。这是核心
自己提供的扩展点,不改核心文件,删掉即回退。

模板新增 links 参数,把 通过/回收站/垃圾 渲染成一行文字链接
(并排三按钮在手机上必然换行、高度不齐)。

版本 4.2.1 -> 4.2.2
2026-11-06 20:11:24 +08:00

118 lines
5.7 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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';
// 代码高亮:highlight.js 自托管,接管正文与评论区的所有代码块。
// 必须排在 theme-core.php 之后:它要用 kratos_option 读三个开关。
// 必须**早于 theme-comments.php**:评论区渲染要调 yang_hl_render_block()。
// 挂在 the_content 优先级 9 —— 早于 wpautop(10),
// 因为裸 <pre>(站内实测 80 个,占 28.2%)一旦先被 wpautop 包进 <p>,
// 行首缩进就会被 white-space:normal 折叠掉,代码完全没法读。
require get_template_directory() . '/inc/theme-highlight.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';
// 归档式文章列表([Archives] 短代码):年/月归类 + 浏览/评论/点赞计数 + 四角年份切换。
// 必须排在 theme-article.php 之后:计数读的是它写的 post meta(views / love)。
// 也必须排在 theme-core.php 之后:它用 ASSET_PATH 与 THEME_VERSION 挂资源。
require get_template_directory() . '/inc/theme-archives.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';
// 自动头像:为没有头像的访客按邮箱生成一张(纯 PHP,零外网请求)。
// 必须排在 theme-core.php 之后:它要用 kratos_option。
// 它挂在 get_avatar 过滤器上(优先级 20,晚于 theme-core.php 里
// 那个改 Gravatar 域名的过滤器),所以要保证 theme-core.php 先加载。
require get_template_directory() . '/inc/theme-avatar.php';
// 图片灯箱:正文图片点击在当前页放大、多图轮播、键盘切换。
// 必须排在 theme-core.php 之后:它要用 ASSET_PATH 与 THEME_VERSION。
// 必须排在 theme-article.php 之后:它挂在 the_content 优先级 20,
// 要去掉 imgnofollow()(优先级 10)给图片链接加的 target="_blank"。
require get_template_directory() . '/inc/theme-lightbox.php';
// 邮件模板:必须先于 theme-mail.php 加载,
// 因为后者在发信时会调用 yang_mail_render()
require get_template_directory() . '/inc/theme-mail-template.php';
// 邮件治理:统一接管发信通道、去重、关掉重复通知
require get_template_directory() . '/inc/theme-mail.php';
// 核心评论通知正文接管:挂 comment_notification_text / comment_moderation_text
// 两个过滤器。不接管的话,核心那封纯文本会被 Content-Type: text/html 硬渲染,
// 收件人看到的是一堆没有样式的裸地址(3.2.18 卸载 wpDiscuz 后才暴露)。
require get_template_directory() . '/inc/theme-mail-core.php';
// SMTP 配置(连通性相关,实际接管在 theme-mail.php)
require get_template_directory() . '/inc/theme-smtp.php';
// 写作增强:发布时自动生成别名 / 标签 / 分类 / 摘要(四引擎各自独立)
require get_template_directory() . '/inc/theme-writing.php';
// 访问统计面板:百度统计 API 的数据直出到设置页 + 前台埋点开关。
// 加载时序注意:本文件(functions.php)在 wp-settings 阶段就执行,
// 而 inc/theme-options.php 要等到 init:20 才被 autoload.php require
// (见 inc/options-framework/autoload.php:40/59)。所以本模块**先于**
// theme-options.php 加载 —— 它定义的面板函数到构建选项数组时已经就绪,
// 那边可以直接调用,不需要 function_exists 兜底。
// 但也因为先加载:本文件里不得调用 kratos_option(),
// 那个函数由 autoload.php 在更晚才定义(目前只在函数体内调用,安全)。
require get_template_directory() . '/inc/theme-stat.php';