如何无需插件将WordPress父slug下页面迁移至新自定义文章类型slug
无需插件实现WordPress页面到自定义文章类型的迁移
可以不用插件完成这个迁移,核心是通过修改数据库调整文章类型,配合重写规则确保链接正常,具体步骤如下:
1. 确认自定义文章类型配置
如果需要保留原页面的层级关系,确保注册new-slug自定义文章类型时,supports数组包含'page-attributes',这样迁移后仍可设置父项。注册代码示例片段:
register_post_type('new-slug', array( // 其他配置项 'supports' => array('title', 'editor', 'page-attributes'), // 包含page-attributes 'rewrite' => array('slug' => 'new-slug'), // 确保slug设置正确 ));
2. 修改数据库迁移文章类型
操作前必须备份数据库,避免数据丢失:
- 登录网站的phpMyAdmin,找到WordPress对应的数据库
- 打开
wp_posts表(数据库前缀可能不是wp_,以实际设置为准) - 执行SQL语句,将目标页面的
post_type从page改为new-slug:- 如果要迁移
/current-slug/父页面及其所有子页面:UPDATE wp_posts SET post_type = 'new-slug' WHERE post_type = 'page' AND (post_name = 'current-slug' OR post_parent = (SELECT ID FROM wp_posts WHERE post_name = 'current-slug' AND post_type = 'page')); - 如果仅迁移特定子页面,可根据实际条件调整WHERE子句
- 如果要迁移
执行后,这些页面会从后台「页面」管理区消失,出现在new-slug自定义文章类型的管理菜单中。
3. 刷新永久链接规则
登录WordPress后台,进入「设置」→「固定链接」,直接点击「保存更改」,无需修改任何设置,让WordPress刷新重写规则,确保新的自定义文章类型链接生效。
4. 添加重定向避免404(可选但推荐)
为了让旧链接自动跳转到新地址,在主题的functions.php中添加以下代码:
add_action('init', 'current_to_new_slug_redirect'); function current_to_new_slug_redirect() { global $wp_rewrite; // 匹配旧路径,重定向到新路径 add_rewrite_rule('^current-slug/?$', 'index.php?new-slug=current-slug', 'top'); add_rewrite_rule('^current-slug/(.*)$', 'index.php?new-slug=$matches[1]', 'top'); $wp_rewrite->flush_rules(false); }
添加完成后,再次保存固定链接设置,使重定向规则生效。
注意事项
- 数据库操作有风险,务必提前备份
- 迁移后检查后台自定义文章类型管理区,确认页面已正确迁移
- 测试前台旧链接和新链接的访问状态,确保无404或跳转异常
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

