我最近又回到这个问题上,终于找到了解决办法!它可能对您有效,也可能无效-有两种可能的情况:
如果您网站上的某些帖子位于父类别下,而某些帖子位于子类别(子类别)下,或者这些类别具有不同的嵌套级别(一些父类别只有子类别,而另一些则是子类别),则there is no solution. 无法区分news/category/post-name/
从…起news/category/subcategory/
在重写规则中使用regex。
如果所有类别都有固定的嵌套级别,并且只在最后一个级别的子类别中发布,那么你就很幸运了!There is quite simple solution:
这404页news
在类别库和自定义永久链接结构中,类别库内部重写规则优先于永久链接结构规则。所以news/category/subcategory/postname/
被解释为index.php?category_name=category/subcategory/postname
很明显,WordPress找不到这样的类别,返回404页。
您需要做的是在规则列表的顶部添加新的重写规则。将此代码放入functions.php
或任何你认为合适的地方:
add_action( \'init\', \'wpa58471_category_base\' );
function wpa58471_category_base() {
// Remember to flush the rules once manually after you added this code!
add_rewrite_rule(
// The regex to match the incoming URL
\'news/([^/]+)/([^/]+)/([^/]+)(/[0-9]+)?/?$\',
// The resulting internal URL
\'index.php?category_name=$matches[1]/$matches[2]&name=$matches[3]&paged=$matches[4]\',
// Add the rule to the top of the rewrite list
\'top\' );
}
然后从WordPress常规选项页面更新permalink结构。上面的代码用于两级嵌套,如果您有或多或少的嵌套类别结构,则相应地编辑regex和生成的URL。
P、 感谢这些有用答案的贡献者:help with add_rewrite_rule 和tool to analyze rewrite rules.