修复压缩产物丢失的代码块样式,并把主题更新源收进主站

1. kratos.min.css 补回 6 条代码块样式
   上次为了注释掉 max-height 把单行压缩版手工展开,展开时整组丢了
   .content 下的 pre / code / kbd / pre code / pre ol / pre li,
   而未压缩的 kratos.css 里它们都在,源与产物从此不一致。
   表现是行内 code 与 kbd 没有样式(代码块因插件主题覆盖才没露馅)。
   改为用 clean-css 从 kratos.css 重新生成,不再手工维护产物。

2. 删掉 max-height / text-overflow 两条声明,而不是注释掉
   注释会被压缩器剥掉,产物里等于没改过。

3. 补上 Prism 代码高亮兜底(此前只存在于线上,仓库里没有)
   语言包路径改用 plugins_url() 动态生成,换域名或加 CDN 不会静默 404。

4. 主题更新元数据从独立子域名迁到主站 /theme-update/
   地址可用 wp-config.php 的 YANG_THEME_UPDATE_URL 覆盖,换域名不必改主题代码。

5. footer 的主题链接指向自建源库;补文档说明自动升级会覆盖主题目录、
   以及发布新版本必须"先打包再改版本号"的顺序。

6. 顺带去掉 .a-post .header .label 里重复声明的 position。
This commit is contained in:
2026-10-23 09:06:16 +08:00
parent 61d0111e0b
commit ffbe1b9b73
5 changed files with 113 additions and 2213 deletions
+72 -1
View File
@@ -41,4 +41,75 @@ https://github.com/vtrois/kratos
}
```
就可以了。该问题属于和插件的冲突问题,因此,在额外CSS中添加,不修改主题本身。
就可以了。该问题属于和插件的冲突问题,因此,在额外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.0 → 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/` 再解压新包**。
所以任何直接改在服务器主题目录里的东西都会丢,包括:
- `custom/custom.css`、`custom/custom.js`(放本地自定义样式的常用位置)
- 手工打的补丁(例如曾经直接在 `footer.php` 里加的 Prism 脚本)
把自定义内容放主题目录外,或者在升级后重新部署。本仓库的 `custom/` 已经纳入版本管理,
修改请改仓库再发布新版本,不要在服务器上直接编辑。
## 换域名 / 退役旧域名
以前更新元数据放在独立子域名上,现在收进主站,省掉一个站点、一套证书和一份备案。
切换时注意:
1. 先把 `theme-update/` 部署到主站并确认 `update.json` 能直接访问(返回 JSON,不是 404 或首页)
2. 再发布带新地址的主题版本
3. **旧版本的主题仍会去老地址拉更新**,所以旧域名的 `update.json` 要在确认所有站点都升级完之后才能下线
+2 -3
View File
@@ -575,14 +575,13 @@ button:focus {
display: -webkit-box;
overflow: hidden;
margin: 3px 0 6px;
max-height: 25px;
text-overflow: ellipsis;
/* 下面两条已废弃:新版 Chrome 里 max-height 与 -webkit-line-clamp 同时生效会截断成半行。
直接删除而不是注释,因为注释会被 CSS 压缩器剥掉,产物里等于没改。 */
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
}
.k-main .board .article-panel .a-post .header .label {
position: relative;
position: relative;
top: -2px;
display: inline-block;
+1 -2206
View File
File diff suppressed because one or more lines are too long
+27 -2
View File
@@ -44,8 +44,8 @@
<?php
$sitename = get_bloginfo('name');
$Year = date("Y");
echo '<p>' . 'COPYRIGHT © '. $Year . ' ' . $sitename . ' 版权所有' . '</p>';
echo '<p>THEME <a href="https://gitee.com/semoryang/kratos_yang" target="_blank" rel="nofollow">KRATOS YANG</a> Modified BY <a href="https://yangyq.net" target="_blank" rel="nofollow">老杨</a></p>';
echo '<p>' . 'COPYRIGHT © ' . $Year . ' ' . $sitename . ' 版权所有' . '</p>';
echo '<p>THEME <a href="https://git.yangyq.net/laoyang/wordpress-kratos-yang" target="_blank" rel="nofollow">KRATOS YANG</a> Modified BY <a href="https://yangyq.net" target="_blank" rel="nofollow">老杨</a></p>';
if (kratos_option('s_icp')) {
echo '<p><a href="https://beian.miit.gov.cn/" target="_blank" rel="nofollow">' . kratos_option('s_icp') . '</a></p>';
}
@@ -60,5 +60,30 @@
</div>
</div>
<?php wp_footer(); ?>
<?php
/**
* Prism 代码高亮兜底
*
* 主题前台是整页跳转,本不需要这段;但 wp-editormd 插件的 Prism autoloader
* 依赖 DOMContentLoaded 之后的动态语言包加载,遇到被其它插件延后插入的
* 代码块就会漏高亮。这里在</body>前再补一次。
*
* 语言包路径用 plugins_url() 动态取,不要写死域名:
* 站点换了域名或加了 CDN,写死的地址会静默 404(表现为代码块不上色)。
*/
if (defined('WP_PLUGIN_DIR') && file_exists(WP_PLUGIN_DIR . '/wp-editormd/assets/Prism.js/components/')) {
$prism_langs = plugins_url('/wp-editormd/assets/Prism.js/components/');
?>
<script type="text/javascript">
if (window.Prism && Prism.plugins && Prism.plugins.autoloader) {
Prism.plugins.autoloader.languages_path = <?php echo wp_json_encode($prism_langs); ?>;
}
if (window.Prism && typeof Prism.highlightAll === 'function') {
Prism.highlightAll();
}
</script>
<?php
}
?>
</body>
</html>
+11 -1
View File
@@ -182,8 +182,18 @@ function get_https_avatar($avatar)
add_filter('get_avatar', 'get_https_avatar');
// 主题更新检测
//
// 更新元数据放在站点自己的域名下(/theme-update/update.json),不再单独占一个子域名。
// 好处是复用主站的证书、备案与 CDN,少维护一套站点。
// 注意:update.json 必须能被无条件公开访问。它落在 WordPress 根目录下,但主站 .htaccess
// 的重写规则带了 !-f 条件,真实存在的文件不会被送进 index.php,所以能正常直出。
// 若以后装了拦截直链的安全插件,先确认这个路径没被拦。
if (!defined('YANG_THEME_UPDATE_URL')) {
define('YANG_THEME_UPDATE_URL', 'https://yangyq.net/theme-update/update.json');
}
$myUpdateChecker = Puc_v4_Factory::buildUpdateChecker(
'https://theme.yangyq.net/update.json',
YANG_THEME_UPDATE_URL,
get_template_directory() . '/functions.php',
'Kratos_Yang'
);