WordPress 内容导入与导出高级指南:使用 WP-CLI 和内置工具批量迁移文章、用户和设置
WordPress 内置了内容的导入导出功能,在后台工具菜单中可以导出文章、页面、评论、自定义字段、分类和标签。但这个工具在处理大型网站或复杂数据时有一些限制。使用 WP-CLI 可以实现更高效、更灵活的导入导出,而自定义导出器则可以让你控制导出内容的粒度。
WordPress 内置的导入导出工具 使用 WXR(WordPress eXtended RSS)格式。导出文件是一个 XML 文件,包含了文章、作者、分类、标签和自定义字段。导入时,你可以选择导入所有内容,也可以指定作者映射、日期等选项。
内置工具适合中小型网站的迁移或备份,但在以下场景中力不从心:
-
数据量很大(超过几百篇文章),导出/导入过程会超时
-
需要按条件筛选导出(比如只导出某个分类的文章)
-
需要导出用户、设置、菜单等更多类型的数据
-
需要自动化导出(比如定期备份)
WP-CLI 的导入导出命令 提供了更多控制选项。导出所有文章为 WXR 文件:
wp export --post_type=post --posts_per_page=1000 --dir=/path/to/backup
--posts_per_page 参数可以控制每次导出的数量,避免内存耗尽。--dir 指定导出文件的存放目录。
导出特定分类的文章:
wp export --post_type=post --category=news --dir=/backup
导出自定义文章类型:
wp export --post_type=product,case_study --dir=/backup
导出用户数据:
wp export --post_type=user
导入 WXR 文件使用 wp import 命令:
wp import /path/to/export.xml --authors=create
--authors=create 会在导入时创建新的作者账号,如果作者已经存在,可以指定映射关系。
自定义导出器 可以让你按自己的格式导出数据,比如 CSV、JSON 或 Excel。这对于与第三方系统对接非常有用。你可以创建一个导出页面,在后台让管理员选择导出格式和筛选条件:
add_action('admin_menu', 'add_export_page');
function add_export_page() {
add_submenu_page('tools.php', '自定义导出', '自定义导出', 'export', 'custom-export', 'render_custom_export_page');
}
function render_custom_export_page() {
if (!current_user_can('export')) return;
if (isset($_POST['export_action'])) {
$format = $_POST['format'] ?? 'csv';
$post_type = $_POST['post_type'] ?? 'post';
$args = array(
'post_type' => $post_type,
'posts_per_page' => -1,
'post_status' => 'publish',
);
$posts = get_posts($args);
if ($format === 'csv') {
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=export.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('ID', '标题', '链接', '发布日期'));
foreach ($posts as $post) {
fputcsv($output, array(
$post->ID,
$post->post_title,
get_permalink($post->ID),
$post->post_date,
));
}
fclose($output);
exit;
}
}
?>
<div class="wrap">
<h1>自定义导出</h1>
<form method="post">
<table class="form-table">
<tr>
<th>导出格式</th>
<td>
<select name="format">
<option value="csv">CSV</option>
<option value="json">JSON</option>
</select>
</td>
</tr>
<tr>
<th>文章类型</th>
<td>
<select name="post_type">
<?php foreach (get_post_types(array('public' => true), 'objects') as $pt): ?>
<option value="<?php echo $pt->name; ?>"><?php echo $pt->label; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
</table>
<p><input type="submit" name="export_action" value="导出" class="button button-primary" /></p>
</form>
</div>
<?php
}
这个页面可以让管理员以 CSV 或 JSON 格式导出任意文章类型的数据。
定时自动导出 是另一个实用功能。结合 WP-Cron 和 WP-CLI,你可以设置每天凌晨自动导出整个网站的内容,并发送到邮箱或云存储:
# 在系统 Cron 中添加 0 2 * * * cd /网站路径 && wp export --post_type=post,page --dir=/backup && tar -czf /backup/export-$(date +\%Y\%m\%d).tar.gz /backup/*.xml
导入外部数据 到 WordPress 同样重要。你可能需要从 CSV 文件批量导入文章、产品或者用户。使用 WP-CLI 的 wp post create 命令可以逐行读取 CSV 并创建文章。更复杂的导入可以使用 wp eval-file 执行自定义 PHP 脚本,逐条处理数据,进行数据清洗和映射。
导入导出是网站管理中的高频操作。掌握内置工具和 WP-CLI 的结合使用,你可以处理任何规模的内容迁移任务。对于定期备份和内容同步,自动化的导入导出流程可以节省大量时间并降低出错风险。

