主题升级覆盖的是模板文件,不是"改主题"这件事本身。手改过的样式能不能回来,只取决于一件事:改之前有没有留一份能重放的档。留了,升级等于重启一下;没留,就得凭记忆重新摸一遍,而且大概率摸不回原样。

先分清哪几种改动会掉
同一个主题里的改动,命运完全不同,先分类再谈备份,不然备份的是一堆用不上的文件。

| 改动类型 | 升级后会掉吗 | 恢复方式 |
|---|---|---|
| 后台主题设置(目录在左还是右、显示什么) | 不掉 | 存在数据库里,主题没改字段名就一直有效 |
模板文件 templates/*.html |
必掉 | 贴回片段,重启容器才生效 |
静态资源 assets/css、assets/js |
必掉 | 贴回片段,改版本串,不用重启 |
| 正文里写死的样式(比如文末那个署名框) | 不掉 | 属于文章内容,跟主题没关系 |
这里有个反直觉的点:模板文件改完,刷新页面看不到变化。模板是在容器启动时编译进内存的,改盘上的文件不改内存里的那一份。静态资源相反,改完立刻生效。所以"我改了啊怎么没变"和"我改了怎么还需要重启",说的是两种不同的文件。
留档要留能重放的东西
整目录备份没用——下次还得逐个文件 diff,找出哪几行是自己加的。要留的只有三样:改的是哪个文件(相对路径)、追加的片段原文(整块,可以直接粘)、怎么验证生效(一条命令,或者一个肉眼可见的现象)。
片段存成独立小文件,放在主题目录外面,命名带用途不带日期:
article-toc-mobile.css 手机端目录抽屉
layout-og.html <head> 里的分享卡片标签
taxonomy-grid.css 分类页卡片布局
文件名里写用途,半年后还认得出来;写日期的话,一堆 bak-20261020 摆在面前,谁也说不清哪个是最新那版。
重放的顺序
顺序错了会白忙一场,正确是四步:
- 贴模板片段和静态资源片段;
- 改静态资源的版本串;
- 重启容器,等它起来;
- 逐项验证。
第二步最容易漏,也最隐蔽。主题引用样式表时带了一个 ?v=版本号 的查询串,而 CDN 对静态资源给的缓存时间是一年。你改完 CSS、内容确实对了,但版本串没变,浏览器和 CDN 拿到的还是旧文件——现象是"规则写对了,页面没变",然后开始怀疑选择器写错、怀疑被别处覆盖,绕一大圈。
第三步只为模板服务,静态资源不需要重启。重启后要等容器真的起来了再验,否则截到的是白屏,看着像改崩了。这一步通常会弹审批框,别以为命令卡死了。
验证别只看自己那台手机
至少三项:
目录——桌面上在右侧固定,手机上收成一个可展开的浮动入口,展开时不挡正文的点击区域;
分享卡片——页面源码里 og: 开头的标签数量大于 0,链接发到聊天软件里才有缩略图和摘要;
分类页——三列、两列、一列三个断点各看一遍。
桌面按 1280 宽、手机按 390 宽各截一张对比,比在电脑上缩放窗口靠谱。手机端最容易出事的正是那个目录:位置对了但盖住正文,等于没做。
这套办法兜不住的部分
有三类情况重放没用,只能重新适配:主题升级改了 class 名;主题自己接管了同一块区域(比如内置了目录组件),你那段样式成了重复实现;升级同时调整了配置结构的字段。
对策很土但有效:每个片段文件的第一行写清它依赖哪个 class 或哪个模板变量,升级后先 grep 一遍那个名字还在不在,在就照贴,不在就先停手改适配。
手改主题的代价不在改的时候,在下次升级的时候。把"下次"要花的时间提前写成一份能重放的清单,它就变成了十分钟。