Files
wordpress-kratos-yang/README.md
T
laoyang 4f0d19fb91 版本号 3.2.4 -> 3.2.5(修 Prism 报错,项目地址改为自建 Git)
## 修 Prism is not defined

首页控制台报 `Uncaught ReferenceError: Prism is not defined`,来源是
wp-editormd 插件(不是本主题):它在 Prism 脚本加载之前就无条件执行了
`Prism.plugins.autoloader.languages_path = "..."`。

线上页面里的真实顺序:
    第 668 行  该赋值语句
    第 695 行  prism-core.min.js
    第 696 行  prism-autoloader.min.js

在 `wp_head` 优先级 0 垫一个最小空壳 `window.Prism`(含 plugins.autoloader
这条访问链路),让那句赋值有地方可写。已核对 prism-core.min.js 源码:它开头
只读 `u.Prism.manual` 与 `u.Prism.disableWorkerMessageHandler`,结尾
`global.Prism = Prism` 整体覆盖 —— 空壳必定被真实对象替换,不承担持久职责,
只为吸收那条过早的赋值。已用 jsdom 验证:去掉空壳重现原始报错,加上后消失,
且之后 `Prism.highlightAll` 仍可正常调用。

## 项目地址统一到 code.yangyq.net

原作者署名、原主题地址、README、语言包、JS 里的控制台横幅全部换成自建仓库地址。
LICENSE 文件保持原样不动(MIT 要求保留原始版权声明)。

## CDN 分支改成拿不到就回退本地

原来的 `g_cdn` 分支指向 `cdn.jsdelivr.net/gh/vtrois/kratos`,本仓库在自建
Gitea 上,jsDelivr 只认 github/npm/wordpress,实测该地址 404。现改为仅在
`YANG_THEME_CDN_REPO` 常量存在时才走 CDN,否则一律用
`get_template_directory_uri()`。留一个 404 的地址比留空更危险:页面能开、
样式全丢,极难排查。

## 顺带

- `.gitattributes` 补 `*.mo binary`:原来是靠"含 NUL"启发式判定,不是契约
- `update.json` 的版本号跟进到 3.2.5
- `kratos.min.js` / `kratos.min.css` 用压缩器重新生成,不手工改产物
2026-10-23 12:55:41 +08:00

128 lines
6.6 KiB
Markdown
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.
该项目是原kratos的一个分支。
本项目仓库地址:
https://code.yangyq.net/laoyang/wordpress-kratos-yang
因为我需要一些定制的功能,就fork出来一个新的分支,自己用。如果你对原有的主题开发也有不满意的地方,欢迎使用我的这个版本。当然,版权仍然是属于原主题。
主题预览:<a href="https://yangyq.net" target="_blank">老杨说话的地方</a>。
该仓库已同步到多个git托管平台,包括<a href="https://github.com/dryangyq/wordpress-kratos-yang.git" target="_blank">Github</a>、<a href="https://gitee.com/dryangyq/wordpress-kratos-yang.git" target="_blank">Gitee</a>、
<a href="https://gitlab.com/dryangyq/wordpress-kratos-yang.git" target="_blank">Gitlab</a>和<a href="https://code.aliyun.com/dryangyq/wordpress-kratos-yang.git" target="_blank">阿里云Code</a>。这些代码库都和<a href="https://code.yangyq.net/laoyang/wordpress-kratos-yang.git" target="_blank">源库</a>保持一致和同步,在任何平台上关注都可以。
**Github因为网络原因,同步会出现失败情况,无法保证最新。**
主要修改的地方主要包括:
1. 为移动端增加了侧边栏显示。之前的版本,在移动端无法看到最近评论,这个版本加入了这个功能。当然只是在首页,在文章页面,为了减少数据传输,仍然没有侧边栏。
2. 文章聚合widget,将最新文章优先显示。原来的版本,是显示最热门文章,但是不知道什么原因,热点文章总是没几个,而且我认为,大部分人上来,应该时主要为了看最新文章的吧。
3. 删除了配置页面中的关于主题,精简、精简、精简。
4. 删除了资源托管选项,删除了媒体托管选项。
5. 文章配置中,删除了文章版权信息,删除了网易云音乐。
6. 删除了社交相关配置选项。
7. 增加了在页脚显示国旗的选项。
# 修复Bug
1. 如果使用了插件,会改变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`:
```bash
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` 必填):
```json
{
"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 认为没有新版本,不会提示升级。
1. 改 `style.css` 的 `Version`(例如 3.2.2 → 3.3.0)
2. 打包:`zip -r kratos_yang.zip kratos_yang -x "*.DS_Store" "*/.git/*"`
3. 传 `kratos_yang.zip` 到 `theme-update/`
4. **最后**才改 `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」还原成主题自带的默认样式
## 换域名 / 退役旧域名
以前更新元数据放在独立子域名上,现在收进主站,省掉一个站点、一套证书和一份备案。
切换时注意:
1. 先把 `theme-update/` 部署到主站并确认 `update.json` 能直接访问(返回 JSON,不是 404 或首页)
2. 再发布带新地址的主题版本
3. **旧版本的主题仍会去老地址拉更新**,所以旧域名的 `update.json` 要在确认所有站点都升级完之后才能下线