如何将非WordPress博客迁移至WordPress平台
嘿,这个迁移需求我之前帮不少开发者处理过,一步步来其实没那么复杂,咱们分模块拆解,尽量减少手动工作量:
一、文章内容与元数据的迁移(无需手动复制)
直接把旧博客表导入WordPress数据库不可行,因为WordPress的文章表(wp_posts)和元数据表(wp_postmeta)有自己的结构规则,直接导入会导致数据不兼容。推荐两种更靠谱的方式:
方法1:自定义PHP脚本批量导入
这是最灵活的方式,适合有一定开发能力的情况:
- 先同时连接旧数据库和WordPress的数据库
- 遍历旧博客表的每一篇文章:
- 把旧文章的标题、内容、发布时间对应插入到
wp_posts表,注意post_type设为post,post_status设为publish(或者draft按需调整) - 把旧文章的元数据(比如作者ID、自定义字段)插入到
wp_postmeta表,关联对应的post_id
- 把旧文章的标题、内容、发布时间对应插入到
- 示例伪代码参考:
// 连接旧数据库 $oldDb = new mysqli('旧数据库地址', '用户名', '密码', '旧库名'); // 连接WordPress数据库 $wpDb = new mysqli('WP数据库地址', '用户名', '密码', 'WP库名'); // 查询旧文章列表 $oldPosts = $oldDb->query("SELECT id, title, content, created_at, author_id FROM old_blog_posts"); while ($post = $oldPosts->fetch_assoc()) { // 插入wp_posts表,注意转义特殊字符避免SQL注入 $wpDb->query("INSERT INTO wp_posts (post_title, post_content, post_date, post_author, post_status, post_type) VALUES ('" . $wpDb->real_escape_string($post['title']) . "', '" . $wpDb->real_escape_string($post['content']) . "', '" . $post['created_at'] . "', " . $post['author_id'] . ", 'publish', 'post')"); $newPostId = $wpDb->insert_id; // 插入自定义元数据(比如记录旧文章ID,方便后续排查) $wpDb->query("INSERT INTO wp_postmeta (post_id, meta_key, meta_value) VALUES ($newPostId, 'old_post_id', " . $post['id'] . ")"); }
- 提示:如果熟悉WordPress开发,用WordPress自带的
$wpdb类操作会更安全,还能自动处理表前缀。
方法2:用WordPress的CSV导入工具
如果你不想写代码,这个零开发成本的方式更友好:
- 把旧博客表导出为CSV文件,包含标题、内容、发布时间、作者、分类这些核心字段
- 在WordPress后台搜索安装官方导入插件,选择CSV导入选项
- 按照提示把CSV里的字段和WordPress的文章字段一一对应,就能批量导入文章和基础元数据
二、图片的迁移(自动批量处理,告别手动复制)
图片的处理分两步:迁移文件 + 更新文章里的图片链接:
迁移图片文件
- 如果旧图片存在文件系统里,直接把旧网站的图片目录(比如
/old-blog/uploads/)整个复制到WordPress的wp-content/uploads/目录下,也可以新建子目录(比如/wp-content/uploads/old-imported/)单独存放 - 如果旧图片是存储在数据库的二进制数据里,需要先写脚本把这些数据导出为图片文件,再放到WordPress的uploads目录
- 如果旧图片存在文件系统里,直接把旧网站的图片目录(比如
批量更新文章里的图片链接
- 用自定义脚本导入的话,可以在插入文章内容时,批量替换旧图片链接为新路径。比如把
http://old-site.com/uploads/1.jpg替换成http://new-wp-site.com/wp-content/uploads/old-imported/1.jpg - 用CSV导入的话,可以先在CSV里批量替换链接,或者导入后用SQL语句批量更新:
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://old-site.com/uploads/', 'http://new-wp-site.com/wp-content/uploads/old-imported/'); - 想要让这些图片纳入WordPress媒体库管理,可以用插件扫描uploads目录里的图片,批量添加到媒体库,这样后续就能在编辑器里直接编辑这些图片了
- 用自定义脚本导入的话,可以在插入文章内容时,批量替换旧图片链接为新路径。比如把
三、关联文章(分类、标签、相关推荐)的迁移
- 分类/标签:先在WordPress后台创建和旧博客对应的分类、标签,然后用脚本或SQL把旧文章的分类/标签映射到WordPress的
wp_term_relationships、wp_term_taxonomy表;如果用CSV导入,直接在CSV里指定分类/标签字段即可 - 相关文章:如果旧博客有手动设置的相关文章,先把旧文章ID和新文章ID的对应关系整理成映射表,再用脚本批量添加到
wp_postmeta里(比如设置_related_posts元字段),后续用相关文章插件读取这个字段就能正常显示
重要注意事项
- 先在测试环境完成整个迁移流程,确认数据完整、格式正常后,再迁移到生产环境
- 迁移前一定要备份旧网站的数据库和文件,以及新WordPress的数据库,避免数据丢失
- 如果旧文章里有特殊格式(比如自定义HTML、私有短代码),迁移后要抽查几篇文章,确认格式是否正常,必要时做批量替换调整
内容的提问来源于stack exchange,提问作者Rost
相关产品推荐
相关产品推荐

