网站从PHP迁移至WordPress:寻求数据库导出导入自定义脚本协助
非WordPress PHP站到Hostinger WordPress的数据迁移方案
1. 导出原有网站数据库
命令行方式(推荐)
直接用mysqldump导出完整SQL文件:
mysqldump -u [原有数据库用户名] -p [原有数据库名] > old_site_data.sql
执行后输入数据库密码即可生成备份文件。
phpMyAdmin方式
如果没有命令行权限,通过原有主机的phpMyAdmin操作:
- 登录phpMyAdmin,选择目标数据库
- 点击顶部「导出」选项,选择「自定义」模式
- 勾选需要迁移的数据表,导出格式选「SQL」,点击「执行」下载备份文件
2. 梳理数据映射关系
先对比原有数据表结构和WordPress核心表的对应关系,核心映射示例:
| 原有数据字段 | WordPress对应表字段 | 说明 |
|---|---|---|
| 文章标题 | wp_posts.post_title | 需转义特殊字符 |
| 文章内容 | wp_posts.post_content | 保留HTML格式需确保合规 |
| 发布时间 | wp_posts.post_date | 转换为MySQL datetime格式 |
| 文章状态 | wp_posts.post_status | 设为publish表示已发布 |
| 内容类型 | wp_posts.post_type | 普通文章用post,页面用page |
| 分类名称 | wp_terms.name/wp_term_taxonomy.taxonomy | 分类对应category,标签对应post_tag |
3. 编写自定义迁移脚本(PHP示例)
以下是基础的迁移脚本框架,需根据你的实际数据表结构调整:
<?php // 原有数据库连接信息 $old_db_host = '原有数据库主机'; $old_db_user = '原有数据库用户名'; $old_db_pass = '原有数据库密码'; $old_db_name = '原有数据库名'; // Hostinger上WordPress的数据库连接信息(可在wp-config.php中找到) $wp_db_host = 'localhost'; // Hostinger默认通常是localhost $wp_db_user = 'WordPress数据库用户名'; $wp_db_pass = 'WordPress数据库密码'; $wp_db_name = 'WordPress数据库名'; // 连接两个数据库 $old_conn = new mysqli($old_db_host, $old_db_user, $old_db_pass, $old_db_name); $wp_conn = new mysqli($wp_db_host, $wp_db_user, $wp_db_pass, $wp_db_name); if ($old_conn->connect_error || $wp_conn->connect_error) { die('数据库连接失败: ' . $old_conn->connect_error . ' | ' . $wp_conn->connect_error); } // 查询原有文章数据(替换为你的实际表名和字段) $old_posts_query = "SELECT id, title, content, publish_time, category FROM old_articles WHERE status = 'active'"; $old_posts_result = $old_conn->query($old_posts_query); while ($post = $old_posts_result->fetch_assoc()) { // 处理发布时间格式(假设原有时间是时间戳,转换为datetime) $post_date = date('Y-m-d H:i:s', $post['publish_time']); // 插入到wp_posts表 $wp_insert_post = $wp_conn->prepare("INSERT INTO wp_posts (post_title, post_content, post_date, post_status, post_type, comment_status, ping_status) VALUES (?, ?, ?, 'publish', 'post', 'closed', 'closed')"); $wp_insert_post->bind_param("sss", $post['title'], $post['content'], $post_date); $wp_insert_post->execute(); $new_post_id = $wp_conn->insert_id; // 处理分类关联(示例:将原有分类映射到WordPress分类) $category_name = $post['category']; // 检查分类是否已存在 $check_term = $wp_conn->prepare("SELECT term_id FROM wp_terms WHERE name = ?"); $check_term->bind_param("s", $category_name); $check_term->execute(); $check_term_result = $check_term->get_result(); if ($check_term_result->num_rows === 0) { // 插入新分类 $wp_conn->query("INSERT INTO wp_terms (name, slug, term_group) VALUES ('$category_name', '" . sanitize_title($category_name) . "', 0)"); $term_id = $wp_conn->insert_id; // 关联分类 taxonomy $wp_conn->query("INSERT INTO wp_term_taxonomy (term_id, taxonomy, description, parent, count) VALUES ($term_id, 'category', '', 0, 1)"); } else { $term_row = $check_term_result->fetch_assoc(); $term_id = $term_row['term_id']; // 更新分类计数 $wp_conn->query("UPDATE wp_term_taxonomy SET count = count + 1 WHERE term_id = $term_id AND taxonomy = 'category'"); } // 关联文章与分类 $wp_conn->query("INSERT INTO wp_term_relationships (object_id, term_taxonomy_id, term_order) VALUES ($new_post_id, (SELECT term_taxonomy_id FROM wp_term_taxonomy WHERE term_id = $term_id AND taxonomy = 'category'), 0)"); } // 关闭连接 $old_conn->close(); $wp_conn->close(); echo '数据迁移完成'; ?>
脚本注意事项
- 替换所有占位符(如原有数据库信息、表名、字段名)为实际值
- 先在本地测试脚本,避免直接操作线上数据库
- 使用
prepare语句防止SQL注入 - 若有自定义字段,需对应插入
wp_postmeta表
4. 在Hostinger上执行迁移
上传脚本到Hostinger主机
- 通过Hostinger的文件管理器或FTP,将脚本上传到网站根目录(确保不在公开访问路径,执行后删除)
- 访问脚本URL(如
yourdomain.com/migrate.php)执行迁移
验证迁移结果
- 登录WordPress后台,检查「文章」「分类」菜单下的数据是否完整
- 访问前端页面,确认内容显示正常
- 进入「设置-固定链接」,点击「保存更改」刷新链接规则
5. 后续清理
- 删除迁移脚本,避免安全风险
- 备份WordPress数据库,防止数据丢失
内容的提问来源于stack exchange,提问作者Joelma Teodoro
相关产品推荐
相关产品推荐

