👁 521
这几天我把 godsun.pro 这套站从 Halo 那边慢慢整理到 WordPress,原本想法很简单:文章搬过去,主题调一下,能正常访问就行。
真动手以后才发现,迁移博客这件事最麻烦的不是“会不会安装 WordPress”,而是那些很碎、很恶心、很容易被忽略的小坑:导入文件格式、容器名字、主题读取字段、Cloudflare 缓存、后台入口、阅读量插件……每一个单独看都不大,连起来就能把人磨半天。
这篇就当一个实战记录。不是标准官方教程,也不是照着文档抄一遍,而是把我这几天从 Halo 搬到 WordPress 的过程、踩坑点和最后整理出来的流程写下来。以后再折腾别的站,至少不用从零再踩一遍。

为什么要从 Halo 整理到 WordPress
Halo 其实挺适合个人博客,界面清爽,写文章也舒服。之前 godsun.pro 那套内容,很多就是 Halo 时代慢慢攒下来的:路由器、OpenWrt、eMMC、盒子、NAS、Docker、各种矿渣折腾记录。
但内容越来越多以后,我发现 WordPress 在几个地方还是更顺手:
- 主题和插件生态更丰富,想改列表、侧边栏、阅读量、SEO 都比较容易找到现成方案。
- 老文章多了以后,分类、标签、搜索、相关文章、热门文章这些东西更好折腾。
- 后面如果要接 AdSense、Search Console、统计、站内链接优化,WordPress 的成熟方案更多。
- 我这边本来就有 Podman 容器环境,WordPress + MariaDB + Nginx 跑起来也不复杂。
所以这次不是因为 Halo 不能用,而是想把老内容整理到一个后面更方便长期维护的环境里。
整体流程:先迁移,再修站,不要一口吃成胖子
这次整理下来,我觉得比较稳的顺序是:
- 先把 WordPress 容器跑起来,确认本地源站能访问。
- 导入 Halo 迁移出来的文章内容,先保证文章能进库。
- 修正固定链接和 Cloudflare Tunnel,让公网能打开。
- 换主题或调主题,把首页、列表页、文章页先做成能看的状态。
- 再处理侧边栏、热门文章、阅读量、评论、后台入口这些细节。
- 最后才是缓存、SEO、导航、分类标签这种长期整理工作。
一开始千万别想着“导入完马上完美”。迁移站点最怕的就是边导入、边改主题、边改插件、边改反代,最后哪里坏了都不知道是哪一步引起的。
踩坑一:WXR 文件开头不能有乱七八糟的东西
WordPress 导入老内容时,最常见的是 WXR/XML 文件。这个东西有个很烦的坑:文件必须从 <?xml 开始。
如果前面混进去 PHP 标签、空行、注释,或者导出文件被某些工具包了一层奇怪内容,WordPress importer 就会报类似“这不是一个有效的 WXR 文件”。
这个坑一开始很像“插件坏了”或者“WordPress 版本不兼容”,但其实就是文件头不干净。我的处理方式很简单:导入前先清理,确保 XML 声明在第一行。
sed -n '/^<?xml/,$p' old.xml > clean.xml
这类问题不高级,但特别浪费时间。迁移前先检查文件头,比在后台反复点导入靠谱。
踩坑二:容器名字和端口别靠记忆
这次 godsun.pro 是跑在本地 ARM64 机器上的,不是在 VPS 上。容器名也不是以前文档里那些旧名字,而是现在这套:
wp-fpm:WordPress PHP-FPMwp-nginx:前端 Nginx,宿主机端口 8088wp-mariadb:数据库
这个坑很实际:如果凭记忆去 SSH VPS,或者拿旧的 wp-halo-test-fpm 容器名执行命令,肯定会改错地方。
所以我后面固定先跑一遍:
podman ps
再用 Host 头测试本地源站:
curl -H "Host: godsun.pro" http://localhost:8088/
这一步很重要。公网打不开时,先看本地源站。如果本地源站是好的,再看 Cloudflare、Tunnel、缓存;如果本地都坏了,就别先怪 Cloudflare。
踩坑三:主题不是装上就完事,Blogsy 还要调很多细节
这次最后用的是 Blogsy 主题。它本身是一个偏杂志/博客风格的主题,适合文章列表、右侧栏、卡片布局,整体比从零写主题省事。
但第三方主题也有第三方主题的问题:默认效果不一定符合自己的站。比如菜单位置、侧边栏是否显示、首页几列、文章页 meta 信息、颜色风格,都要慢慢调。
这里有几个实际坑:
- Blogsy 的菜单位置是
primary_menu,不是很多主题常见的primary。 - 侧边栏不是设置成 right 就一定显示,
sidebar-1里没小工具时它可能直接隐藏。 - 自定义 CSS 走 WordPress 原生 Additional CSS 更稳,不要乱猜主题自己的 option key。
- 菜单标题不能太长,不然导航栏会变双排,看起来很乱。
这种地方如果靠后台一点点试也能搞定,但我更喜欢直接用 WP-CLI 和本地 curl 验证。改完马上看 HTML 里有没有对应元素,比肉眼刷新靠谱。
踩坑四:阅读量“看起来没变”,其实是主题读错地方
这是这次最典型的坑。
WordPress 里装了 Post Views Counter 插件以后,真实阅读量是存在插件自己的数据结构里,并且可以通过 pvc_get_post_views() 读取。
但 Blogsy 主题自带的阅读量函数,原来读的是旧的 post_views meta 字段。结果就出现一种很迷惑的情况:后台或者插件里真实阅读量已经改了,文章页前端却还是显示旧数字。
最后处理方式是改 Blogsy 的 blogsy_get_post_views(),让它优先读取 PVC 插件的真实总阅读量:
if ( function_exists( 'pvc_get_post_views' ) ) {
$count = intval( pvc_get_post_views( $post_ID, 'total' ) );
} else {
$count = intval( get_post_meta( $post_ID, 'post_views', true ) );
}
这样主题显示、侧边栏热门文章、插件统计就能尽量统一到同一个数据源。
踩坑五:那个“0”不是阅读量,是评论数
阅读量刚修好以后,我又碰到一个更搞笑的误会:文章标题下面还是有个 0。
第一眼看过去,很容易以为“阅读量还是没变”。但抓页面源码以后发现,那个 0 是评论数,链接指向 #respond,也就是评论框。
真正的阅读量其实已经在页面里显示了,只是另一个位置还是英文 Post Views:,不够直观。
所以我后面做了两件事:
- 单篇文章页头部关掉容易误解的评论数,打开真实阅读量。
- 用一个 MU 插件把 PVC 前端文案改成中文“阅读:”,并继续读取真实 PVC 总数。
这个坑给我的提醒是:前端看到数字不对,不要先猜,先看源码。链接到 #respond 的,多半是评论;class 里带 post-views 的,才是阅读量。
踩坑六:后台入口要隐藏,但不能把自己绕晕
WordPress 老站最容易被扫的就是 /wp-login.php 和 /wp-admin/。这次我用了 WPS Hide Login,把后台入口改成了:
https://godsun.pro/xoxo-hhhvxzfg
我随便写的你自己改的记得就好
默认登录入口隐藏以后,机器人扫描会少很多。但这里也要记住:以后自己进后台不要再习惯性输 /wp-admin/,否则就像站坏了一样。
不过日常发文和维护,我其实不太需要后台密码。大部分操作都可以直接在本机用 wp-cli、容器命令或者 REST API 做。后台更多是偶尔看一眼页面效果。
踩坑七:缓存问题不要靠感觉判断
WordPress + Nginx + Cloudflare 这一套,只要改主题、改固定链接、改阅读量显示,就可能遇到缓存问题。
我现在比较习惯的验证方式是:
- 先本地源站 curl,加 Host 头。
- 再公网 curl,加随机参数。
- 最后才打开浏览器看。
比如:
curl -H "Host: godsun.pro" http://localhost:8088/CPE-FM350-GL/?v=123
curl https://godsun.pro/CPE-FM350-GL/?v=123
如果本地是新的,公网是旧的,大概率是 Cloudflare 或浏览器缓存。如果本地也是旧的,那就是 WordPress/主题/插件本身没改对。
这个判断顺序能省很多时间。
我最后整理出来的迁移流程图
下面这张图就是这次迁移后的简化版流程。真实过程肯定比图里乱,但核心顺序差不多:先保证内容和容器稳定,再慢慢修主题和体验。
.t{font-family:system-ui,-apple-system,BlinkMacSystemFont,’Segoe UI’,sans-serif}.h{font-weight:700;fill:#0f172a}.s{fill:#475569;font-size:18px}.box{fill:#fff;stroke:#cbd5e1;stroke-width:2}.pit{fill:#fff7ed;stroke:#fdba74;stroke-width:2}.ok{fill:#ecfeff;stroke:#67e8f9;stroke-width:2}
Halo → WordPress 迁移流程 + 踩坑点
先通链路,再修体验;每一步都用本地源站和公网双验证。
1. 导出内容Halo / WXR / 附件 2. 清理导入XML 头 / 分类标签 3. WP 容器FPM / Nginx / DB 4. 公网验证Tunnel / CF / 缓存
5. 主题整理Blogsy / 菜单 / 侧栏6. 阅读量修复PVC 真实数据源7. 最终检查本地 + 公网双 200
坑:WXR 文件头必须从 <?xml 开始
坑:容器名记错先 podman ps 再操作
坑:主题读旧字段改读 pvc_get_post_views
坑:评论 0 误认阅读#respond 是评论入口
这次迁移后我会保留的几个习惯
第一,任何站点操作先确认机器和容器。godsun.pro 在本地,不在 VPS;ai.godsun.pro 和 gwrt.uk 又是另外的环境。这个边界一定要清楚。
第二,主题文件能少改就少改。能用 MU 插件解决的东西,就不要直接改插件核心。比如 PVC 阅读量文案,我最后就是用 MU 插件处理,后面插件升级也不容易被覆盖。
第三,前端显示异常时先看源码,不要只凭截图猜。截图里的一个 0 可能是评论数,也可能是阅读量,也可能是某个 JS 占位。
第四,改完必须验证。本地源站、公开域名、文章页、首页、缓存参数,至少跑一轮。不然看着像好了,过一会儿又被缓存打回原形。
结尾:迁移博客不是搬家,是重新整理仓库
这次从 Halo 整理到 WordPress,最大的感受是:博客迁移不是简单“把文章搬过去”。更像是把一个堆了很久的仓库重新整理一遍。
文章能打开只是第一步。真正花时间的是:分类是否还合理,主题是否适合老内容,阅读量是否可信,热门文章是否能反映真实访问,后台入口是否安全,Cloudflare 和容器链路是否稳定。
折腾完以后,godsun.pro 这套站就更像一个能长期维护的内容库了。老文章继续保留,新文章继续写,后面路由器、OpenWrt、盒子、NAS、Agent 这些内容也能更顺手地串起来。
如果你也准备从 Halo、Typecho、Hexo 或其它博客搬到 WordPress,我的建议就一句:别急着美化,先把迁移链路跑稳;别急着装一堆插件,先把数据源搞清楚。
剩下的,慢慢磨。
by 数码罗记 · godsun.pro
💖 打赏支持
如果这篇文章帮到了你,欢迎打赏支持
微信扫一扫,赞赏支持
发表回复