使用add_permastruct自定义多自定义文章类型URL致常规文章404
问题解决:WordPress自定义分类法导致常规文章/页面404
问题背景
在WordPress 6.1环境下,通过代码创建了company、product两个自定义文章类型,以及country自定义分类法,期望实现的URL结构如下:
- 自定义文章类型:
%country%/%company_postname%、%country%/%product_postname% - 常规文章/页面:
www.example.com/%postname%
已通过$wp_rewrite相关代码搭配post_type_link过滤函数生成了自定义URL,但常规文章和页面出现404错误。
排查过程
- 尝试为文章和页面添加
add_permastruct,未解决问题 - 切换为Plain permalink(
www.example.com/?p=123)时,所有内容加载正常,排除内容本身或模板逻辑问题,锁定重写规则冲突 - 确认常规文章/页面未使用
single.php或page.php,仅调用index.php,排除模板文件导致的404
根源与解决方案
问题出在country自定义分类法的重写配置:
'rewrite' => array('slug' => '/', 'with_front' => FALSE)
将分类法的slug设为/会覆盖根路径的重写规则,导致WordPress无法识别常规文章/页面的%postname%结构。
解决步骤:
- 移除该配置中的
'slug' => '/',可改为默认配置或指定非根路径的slug,示例:
// 方案1:保留with_front设置,使用默认slug 'rewrite' => array('with_front' => FALSE) // 方案2:指定自定义slug 'rewrite' => array('slug' => 'country', 'with_front' => FALSE)
- 进入WordPress后台→设置→固定链接,无需修改任何选项,直接点击「保存更改」刷新重写规则
完成后,常规文章和页面即可恢复正常访问,自定义文章类型的URL结构也能正常生效。
内容的提问来源于stack exchange,提问作者theKing
相关产品推荐
相关产品推荐

