WordPress自定义分类法前置自定义文章类型别名导致根页面跳转首页
问题成因
- 核心问题出在你自行添加的
product_rewrite_rules重写规则逻辑错误:你为每个分类法term添加的正则规则为^' . $term->slug . '/(.*)/?$,该规则会匹配所有以对应term slug开头的路径,且你设置了top优先级,会早于WordPress默认的页面、文章路由规则执行。比如当你访问/personal/info时,会被这个规则拦截,被误判为product自定义文章类型的请求,查询不到对应内容就会触发404后跳转到首页。 - 你当前的规则没有限定路径中必须包含
product这个自定义文章类型标识,导致所有/{term_slug}/开头的路径都被拦截,包括你原本的场景页面和根页面。 - 分类法在前、文章类型在后的结构本身没有问题,只是你的重写规则写的过于宽泛才会产生冲突,而文章类型在前的结构重写规则只会匹配
/product/开头的路径,不会和其他页面路径冲突,所以不会出问题。
修复方案
- 先删除你现有错误的
product_rewrite_rules函数以及对应的add_filter挂载代码,这段逻辑本身不符合WordPress重写规则的编写规范,也不需要遍历所有term生成规则。 - 添加正确的重写规则,仅匹配
/{分类法别名}/product/{文章别名}结构的路径:
function custom_product_rewrite_rules() { // 匹配单篇产品的路径 add_rewrite_rule( '^([^/]+)/product/([^/]+)/?$', 'index.php?product_taxonomy=$matches[1]&product=$matches[2]&post_type=product', 'top' ); // 可选:添加对应分类下的产品归档路径规则 add_rewrite_rule( '^([^/]+)/product/?$', 'index.php?product_taxonomy=$matches[1]&post_type=product', 'top' ); } add_action('init', 'custom_product_rewrite_rules');
- 登录WordPress后台,进入「设置」-「固定链接」页面,直接点击「保存更改」按钮,刷新站点的重写规则缓存即可生效。如果修改后仍有异常,可以先删除站点根目录下的
.htaccess文件,再重新保存固定链接,WordPress会自动生成新的重写规则文件。
内容的提问来源于stack exchange,提问作者Vincent Van Minnebruggen
相关产品推荐
相关产品推荐

