哀悼默认值全部改为不勾选 - 九个纪念日的 default 全改成 0。之前法定那三个是 1,导致全新安装的站点 一到日子就自己变黑白,而站主根本没同意过这件事。 - 后台多选组件的 std 全为 0,打开设置页一个都不勾。 - 「从未保存过」与「保存过但全不勾」两条路径都返回空数组, 不能因为结果为空就回退到默认 —— 那等于用户取消勾选无效。 新增彩色说明页(inc/theme-mourning-page.php + pages/page-mourning.php) - 站点变黑白后必须有个地方解释清楚,否则访客只看到一片灰、以为站点坏了。 - 三处入口:顶部提示条(wp_body_open,首屏可见)、页脚常驻链接、 [yang_mourning] 短代码。 - 页面内容由真实配置驱动,不是写死的文案:没勾的日期不会出现, 今天在列表里带「今天」标记,一个都没勾时明说「不会生效」。 - 页面必须保持彩色,否则解释「为什么是灰的」的页面自己也是灰的。 取消灰度做了两层:filter:none 与 grayscale(0%) 都写,且带 !important; 优先级放在 wp_head 的 2,晚于灰度样式的 1。 - 路由走 parse_request 优先级 5 而非 template_redirect: 避免先走一遍 404 判定与 404 模板。带子目录安装时先剥掉前缀再比对。 - 不抢占用户自己建的页面:如果站里已有同名 slug 的页面就放手。 否则用户会觉得「我建的页面坏了」,且没有任何提示。 邮件不受影响,且回复邮件同时给出双方内容 - 邮件是独立 HTML,不走 wp_head,结构上就不可能被灰度,已断言验证。 - theme-mail-template 的单个 quote 改成 quotes 列表,一个模板同时渲染 「被回复的那条」与「新的回复」,最后一块用主色高亮(回复是重点), 前面的用弱化色。只有一块时退化为主色,与旧行为一致。 - 通过 wpdiscuz_email_content 重建整封邮件,不需要改插件。 审核通过通知用 wpdiscuz_comment_approved_email_content 走同一模板, 但它只给 post_id、不给评论对象,能放的内容受此限制。 两个必须记下来的坑 - wpDiscuz 在过滤器之后还会做一次 html_entity_decode 再发信。 esc_html 的输出会被那一步还原成真标签,评论里的 <script> 直接生效。 所以返回前先把 & 编码一次。本地 stub 没有这一步,测试看不出来。 - header.php 从来没有调用 wp_body_open,挂在上面的东西全部静默失效。 不调用不会报错,只会「什么都没发生」。已补在 <body> 之后。 yang_mail_text 保留换行 - 原来用 wp_strip_all_tags($t, true),第二个参数 remove_breaks 会把换行 压成空格;而 strip_tags 遇到 <br> 是直接删掉不补换行的。 结果整条评论被拍成一行,模板里的 nl2br 成了死代码。 - 改为先把块级边界降级成 \n,再去标签(remove_breaks=false)。 收行内空白用 [^\S\n] 而不是 [ \t\f\v]:PCRE 的 \v 是垂直空白类, 会把 \n 一起匹配掉。 说明页对比度修正(WCAG AA) - 金色 #b8860b 在白底只有 3.06:1,当装饰色没问题,当 12-15px 文字偏虚。 拆成 --ym-gold(装饰)与 --ym-gold-text(#946600,4.75:1,仍属金色)。 - 分组小标题 #9aa5b1 只有 2.36:1,改用 #5f6b78(5.12:1)。 - 「今天」标签白字压金底 3.25:1,改用 #8a6100(5.54:1)。
该项目是原kratos的一个分支。
本项目仓库地址:
https://code.yangyq.net/laoyang/wordpress-kratos-yang
因为我需要一些定制的功能,就fork出来一个新的分支,自己用。如果你对原有的主题开发也有不满意的地方,欢迎使用我的这个版本。当然,版权仍然是属于原主题。
主题预览:老杨说话的地方。
该仓库已同步到多个git托管平台,包括Github、Gitee、 Gitlab和阿里云Code。这些代码库都和源库保持一致和同步,在任何平台上关注都可以。
Github因为网络原因,同步会出现失败情况,无法保证最新。
主要修改的地方主要包括:
- 为移动端增加了侧边栏显示。之前的版本,在移动端无法看到最近评论,这个版本加入了这个功能。当然只是在首页,在文章页面,为了减少数据传输,仍然没有侧边栏。
- 文章聚合widget,将最新文章优先显示。原来的版本,是显示最热门文章,但是不知道什么原因,热点文章总是没几个,而且我认为,大部分人上来,应该时主要为了看最新文章的吧。
- 删除了配置页面中的关于主题,精简、精简、精简。
- 删除了资源托管选项,删除了媒体托管选项。
- 文章配置中,删除了文章版权信息,删除了网易云音乐。
- 删除了社交相关配置选项。
- 增加了在页脚显示国旗的选项。
修复Bug
- 如果使用了插件,会改变comment的div名称,class="comments" 变成了comments-area,因此,评论的样式不好用了。
此时,在主题的额外CSS中添加:
.k-main .details .comments-area {
margin-top: 16px;
padding: 1.6px 16px 16px;
border-radius: 2px;
background-color: #fff;
-webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
-moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
}
.k-main .details .post-2 .comments-area {
-webkit-box-shadow: none;
-moz-box-shadow: none;
box-shadow: none;
}
就可以了。该问题属于和插件的冲突问题,因此,在额外CSS中添加,不修改主题本身。
代码块样式
主题的 assets/css/kratos.css 里有一组 .k-main .details .article .content 下的
pre / code / kbd / pre code / pre ol / pre li 规则,负责代码块与行内代码的底色和间距。
这六条曾经在压缩产物里整组丢失过:某次改动把单行压缩版 kratos.min.css 手工展开成可读格式,
展开时漏掉了这一整段,而原始未压缩的 kratos.css 里它们是齐全的,导致源与产物对不上。
表现是行内 code 与 kbd 没有样式(代码块因为插件 Prism 主题的覆盖才没露馅)。
改完 CSS 后请用压缩器重新生成产物,不要手工维护 kratos.min.css:
npx clean-css-cli@5.6.3 -o assets/css/kratos.min.css assets/css/kratos.css
主题自动更新
更新走的是一份静态 JSON + 一个 zip 包,由 inc/update-checker/(Plugin Update Checker 4.9)消费。
- 元数据地址:
https://yangyq.net/theme-update/update.json(定义在inc/theme-core.php,可用wp-config.php里的YANG_THEME_UPDATE_URL覆盖) - 发布目录:站点根下的
theme-update/,内容只有三样:
theme-update/update.json # 版本元数据
theme-update/kratos_yang.zip # 主题包,解压后是 kratos_yang/ 目录
theme-update/readme.html # 「详情」页,可省
update.json 格式(version 与 details_url 必填):
{
"version": "3.3.0",
"details_url": "https://yangyq.net/theme-update/readme.html",
"download_url": "https://yangyq.net/theme-update/kratos_yang.zip"
}
发布新版本的顺序
先改 style.css 里的 Version,再打包,否则 WordPress 认为没有新版本,不会提示升级。
- 改
style.css的Version(例如 3.2.2 → 3.3.0) - 打包:
zip -r kratos_yang.zip kratos_yang -x "*.DS_Store" "*/.git/*" - 传
kratos_yang.zip到theme-update/ - 最后才改
update.json里的version
第 4 步放最后,是因为 WordPress 见到新版本号就会立刻允许升级; 若此时 zip 还是旧的,等于发了个指向旧包的更新,装完版本号没变(或者直接坏掉)。
⚠️ 自动升级会覆盖主题目录
WordPress 升级主题的做法是删掉整个 kratos_yang/ 再解压新包
(wp-admin/includes/class-theme-upgrader.php 里 clear_destination => true,
随后 delete_old_theme() 递归删除)。所以任何直接改在服务器主题目录里的东西都会丢,
包括手工打的补丁(例如曾经直接在 footer.php 里加的 Prism 脚本)。
自定义样式不再放主题目录。 早期版本有一个 custom/ 目录(custom.css /
custom.js / custom.php),是给用户随手加样式的入口,但它位于主题目录内,
每次升级都会被清空 —— 而且 custom.php 会被 require,等于允许在主题里执行任意
PHP 代码。该模块已在 3.2.2 移除,改为后台选项:
后台 → 主题选项 → 自定义代码 → 自定义 CSS / 自定义 JS
这两段内容存在数据库的 kratos 选项里,升级、重装、改主题目录名都不受影响。
它们分别在主题样式表和主题脚本之后加载,优先级最高。
几个要点:
- 不需要写
<style>/<script>标签,直接写 CSS / JS 内容 - 内容不会被当作 HTML 处理,
>、<、~、反斜杠转义(如content: "\f101")都原样保留 - 想彻底清空,把框里内容删掉保存即可(空值会覆盖内置默认值)
- 点“恢复默认”会把「自定义 CSS」还原成主题自带的默认样式
换域名 / 退役旧域名
以前更新元数据放在独立子域名上,现在收进主站,省掉一个站点、一套证书和一份备案。 切换时注意:
- 先把
theme-update/部署到主站并确认update.json能直接访问(返回 JSON,不是 404 或首页) - 再发布带新地址的主题版本
- 旧版本的主题仍会去老地址拉更新,所以旧域名的
update.json要在确认所有站点都升级完之后才能下线