使用WordPress CLI导入页面时如何忽略重复slug页面?
WordPress CLI导入时忽略已存在的重复页面方案
方法一:通过过滤XML文件实现精准忽略
先提取新站点已存在页面的slug,再过滤原XML文件中对应slug的条目,最后导入过滤后的内容:
- 导出新站点已存在页面的slug列表到本地文件:
wp post list --post_type=page --field=slug > existing-slugs.txt
- 过滤原XML文件,移除slug已存在的页面条目,生成新的待导入XML:
awk 'NR==FNR { slugs[$0]; next } /<wp:post_name>/ { current_slug=substr($0,16,length($0)-30); if (current_slug in slugs) skip=1; else skip=0 } !skip' existing-slugs.txt myoldsite.wordpress.2022-09-15.002.xml > filtered-import.xml
- 导入过滤后的XML文件:
wp import filtered-import.xml
方法二:利用WP CLI钩子(进阶方案)
如果需要更灵活的逻辑,可以自定义钩子在导入前自动检查并跳过重复页面:
- 在新站点的
functions.php或自定义插件中添加以下代码:
add_action('wp_import_post_before_insert', function($post) { if ($post['post_type'] !== 'page') return; $existing_post = get_page_by_path($post['post_name'], OBJECT, 'page'); if ($existing_post) { throw new Exception("Skipping page with slug '{$post['post_name']}' (already exists)"); } });
- 执行原导入命令,钩子会自动跳过已存在slug的页面:
wp import myoldsite.wordpress.2022-09-15.002.xml
内容的提问来源于stack exchange,提问作者Justin Blayney
相关产品推荐
相关产品推荐

