
换主题不是"点一下启用"就完事
很多人换主题的流程是:装新主题 → 启用 → 首页看着还行 → 收工。然后接下来几天陆续发现:小工具错位、会员页 404、SEO 标签重复、缓存里还是旧样式的 HTML、某个功能突然没了。
我在把站从旧主题切到 PandaPRO 时,把整套流程记了下来。换主题的难点从来不是外观,而是那些"主题曾经替你做的事"。
一、换之前:先留三样东西
# 1) 数据库
mysqldump -h <host> -u <user> -p <db> | gzip > db-$(date +%F).sql.gz
# 2) 网站文件
tar -czf site-files-$(date +%F).tar.gz -C /www/wwwroot/example.com .
# 3) 主题设置快照 + 计划任务
# 旧主题的设置在 options 里,先导出再看(文件名带上主题名)
# 并记录当前 crontab,避免换完忘记原来有哪些定时任务
crontab -l > cron-before.txt
第 3 条最容易被忽略:旧主题的选项是存在数据库 options 表里的,换主题后它还在,但新主题根本不读。真正的问题是——如果旧主题注册过自定义数据表或自定义文章类型,那些数据换了主题就再也没人显示了。所以先把旧主题相关的 options 和自建表单独导出留档。
二、换完之后要逐项过的清单
- 先别删旧主题。留在服务器上,出问题时能一键切回去;
- 主题选项要重建,不是迁移。新旧主题的选项结构完全不同,别指望"设置能带过来";
- 检查自定义文章类型。由主题或配套插件注册的类型换了主题后可能就不存在了,之前写的内容会变成"后台还查得到、前台打不开"。确认后决定是保留、迁移还是清理;
- 菜单和主题位置重新绑定。旧主题的菜单位置(比如"顶部菜单")在新主题里可能叫别的名字,需要重新分配;
- 小工具区域重排。侧栏/页脚的小工具池基本都要重配;
- 重置站点图标和分享图。这两个通常按主题选项存,换了就丢;
- 自定义 CSS 十有八九要重写。类名和 CSS 变量都变了,之前写的那套选择器很多不再命中;
- 静态缓存必须清一次。缓存里存的是旧主题渲染出来的整页 HTML,不清的话访客看到的还是旧页面;
- 对象缓存也要清。旧主题缓存过的 options、菜单、小工具数据都还在;
- 依赖旧主题的插件要处理。有些插件是给特定主题做的,换了主题后会报错或静默失效,该停用就停用;
- 检查 SEO 标签是否变成两套。旧主题可能自带 SEO 输出,新主题如果不带、而插件带,很容易出现重复标签;
- 图片/灯箱等前端行为重新确认。旧主题的图片放大、灯箱、懒加载实现都可能不同,之前针对旧主题做的兼容代码要一并评估。
三、清缓存的顺序
顺序错了会白忙:
# 1) 清对象缓存(否则清完页面缓存,重新生成时又读到旧数据)
redis-cli -a <密码> flushdb # 注意:只对单站、独占 db 时这么做
# 2) 清页面缓存(让整页 HTML 重新生成)
# 用插件自带的清理函数,等价于后台点「删除缓存」
多站共用一个 Redis 时不要
flushdb,会清掉别的站,改用插件面板里的「清空对象缓存」或带前缀删除。
四、怎么验证换完了
# 源码里不该再有旧主题的痕迹
curl -s https://www.example.com/ | grep -c '旧主题特有的类名或目录名'
# 标题/描述/canonical 各只应有一条
curl -s https://www.example.com/ | grep -oE 'rel="canonical"|property="og:title"' | sort | uniq -c
# 主题资源路径已切换
curl -s https://www.example.com/ | grep -oE '/wp-content/themes/[^/"]+' | sort -u
五、回滚
保留旧主题目录 + 换之前的数据库与文件备份,就能在几分钟内切回去。这也是第一条"先别删旧主题"的意义:主题不动数据库,切回去的代价很低。
一句话总结:换主题真正的工作量在"旧主题替你做过的事"上——它注册过的类型、存过的选项、写过的 CSS、缓存过的页面。清单照着过一遍,再清对顺序的缓存,才算换完。

评论 (0)