WordPress自定义分类法Permalink问题:移除URL中的Blog前缀
我太懂你的困扰了——明明按要求改了with_front => false,要么URL带着烦人的blog前缀,要么改完直接跳去随机页面,确实让人头大。咱们一步步来把这个问题搞定:
第一步:确认自定义分类法的注册代码是否完整正确
首先得确保你的自定义分类法division和「Case Studies」自定义文章类型是正确绑定的,这是一切的基础。下面是标准的注册示例,你可以对照着调整自己的代码:
function register_division_taxonomy() { $args = array( 'labels' => array( 'name' => 'Divisions', 'singular_name' => 'Division' ), 'public' => true, 'hierarchical' => true, // 如果是层级类分类(类似WordPress自带的分类)就设为true,标签类设为false 'rewrite' => array( 'slug' => 'case-studies', // 对应你想要的URL前缀 'with_front' => false, // 跳过固定链接的前置部分(也就是咱们要去掉的/blog/) 'hierarchical' => true // 如果分类有上下级层级,开启这个支持多级URL ), 'show_in_rest' => true // 可选,支持古腾堡编辑器的分类管理 ); // 关键!第二个参数要和你注册「Case Studies」时用的文章类型slug完全一致 register_taxonomy('division', 'case-studies', $args); } add_action('init', 'register_division_taxonomy');
划重点:这里的自定义文章类型slug(示例里的
case-studies)必须和你注册「Case Studies」时的slug完全匹配,要是不对应,分类法和文章类型就没绑定上,规则肯定会乱套。
第二步:强制刷新固定链接规则
这一步90%的人都会忘,但却是解决这类URL问题的关键!当你修改了rewrite相关设置后,WordPress不会自动更新规则,必须手动触发:
- 登录WordPress后台,进入设置 → 固定链接页面
- 不用改任何设置,直接点击页面底部的保存更改按钮
- 这会让WordPress重新生成rewrite规则,把旧的规则覆盖掉
第三步:手动添加优先规则解决冲突(如果前两步无效)
要是做完前两步还是跳错页面,大概率是自定义文章类型和分类法的rewrite规则冲突了。咱们可以手动加一条优先级更高的规则,确保分类法的URL被正确解析:
在你的主题functions.php文件里添加这段代码:
function fix_case_studies_division_rewrite() { // 添加自定义规则,专门匹配case-studies/分类别名的URL结构 add_rewrite_rule( '^case-studies/([^/]+)/?$', 'index.php?division=$matches[1]', 'top' // 设置为top,让这条规则优先于其他所有规则 ); } add_action('init', 'fix_case_studies_division_rewrite');
加完之后,再去刷新一次固定链接(回到设置→固定链接点保存)。
第四步:检查分类模板文件(可选)
如果URL正常了但显示不对,那得看看主题里有没有对应的分类模板文件,比如taxonomy-division.php。要是没有,WordPress会用默认的archive.php或index.php来显示,虽然不会导致跳转,但如果需要自定义分类页面的样式,就自己创建这个模板文件就行。
做完这些步骤,你的分类法URL应该就能正常显示成http://www.my-domain/case-studies/division-here/,而且不会再跳去奇怪的页面了。
内容的提问来源于stack exchange,提问作者Manoj Soni

