WordPress 换主题后要做的清单:我踩过的 12 个坑-第三维度MokIII

换主题不是"点一下启用"就完事

很多人换主题的流程是:装新主题 → 启用 → 首页看着还行 → 收工。然后接下来几天陆续发现:小工具错位、会员页 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 和自建表单独导出留档。

二、换完之后要逐项过的清单

  1. 先别删旧主题。留在服务器上,出问题时能一键切回去;
  2. 主题选项要重建,不是迁移。新旧主题的选项结构完全不同,别指望"设置能带过来";
  3. 检查自定义文章类型。由主题或配套插件注册的类型换了主题后可能就不存在了,之前写的内容会变成"后台还查得到、前台打不开"。确认后决定是保留、迁移还是清理;
  4. 菜单和主题位置重新绑定。旧主题的菜单位置(比如"顶部菜单")在新主题里可能叫别的名字,需要重新分配;
  5. 小工具区域重排。侧栏/页脚的小工具池基本都要重配;
  6. 重置站点图标和分享图。这两个通常按主题选项存,换了就丢;
  7. 自定义 CSS 十有八九要重写。类名和 CSS 变量都变了,之前写的那套选择器很多不再命中;
  8. 静态缓存必须清一次。缓存里存的是旧主题渲染出来的整页 HTML,不清的话访客看到的还是旧页面;
  9. 对象缓存也要清。旧主题缓存过的 options、菜单、小工具数据都还在;
  10. 依赖旧主题的插件要处理。有些插件是给特定主题做的,换了主题后会报错或静默失效,该停用就停用;
  11. 检查 SEO 标签是否变成两套。旧主题可能自带 SEO 输出,新主题如果不带、而插件带,很容易出现重复标签;
  12. 图片/灯箱等前端行为重新确认。旧主题的图片放大、灯箱、懒加载实现都可能不同,之前针对旧主题做的兼容代码要一并评估。

三、清缓存的顺序

顺序错了会白忙:

# 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、缓存过的页面。清单照着过一遍,再清对顺序的缓存,才算换完。