如果是我,我会这样做。
序言假设以下数据结构:
帖子类型:“dictionary”(字典)分类:“dictionary\\u category”(字典分类),术语仅限于单个字母和所需URL:
词典页面(应在开箱即用)/dictionary/rules/=>页面/dictionary/x/=>分类法存档/dictionary/x/xavier/=>单柱视图/h2>1。设置帖子类型和分类URL注册帖子类型时rewrite
参数应为,
\'rewrite\' => array( \'slug\' => \'dictionary/%dictionary_category%\' )
注册分类时
rewrite
参数应为,
\'rewrite\' => array( \'slug\' => \'dictionary\' )
您需要筛选
post_type_link
因为重写标签(
%dictionary_category%
) 在重写段塞中。下面是它的样子:
function wpse_119806_post_type_link( $post_link, $post, $leavename, $sample ) {
if ( \'dictionary\' == $post->post_type ) {
if ( $categories = get_the_terms( $post->ID, \'dictionary_category\' ) ) {
return str_replace( \'%dictionary_category%\', array_pop( $categories )->slug, $post_link );
}
}
return $post_link;
}
add_filter( \'post_type_link\', \'wpse_119806_post_type_link\', 10, 4 );
现在,/dictionary/x/works和/dictionary/x/xavier/works。
2。在这里设置页面URL,我们将利用dictionary\\u类别术语不会超过1个字符这一事实。在/dictionary/和多个字符之后的任何内容都将假定为一页。
add_action( \'init\', \'wpse_119806_rewrite_rules\' );
function wpse_119806_rewrite_rules() {
add_rewrite_rule( \'(dictionary/[^/]{2,}?)/?$\', \'index.php?pagename=$matches[1]\', \'top\' );
}
刷新重写规则(转到
Settings → Permalinks 然后单击“保存更改”),一切都应按预期进行。
注:这忽略了/博客/;我假设您已经解决了这个问题,所以如果需要,请更改此代码以将其添加到中您可以为页面添加更多规则,以使页面层次结构更深。这只支持第二级。这也不会为页面的提要、分页等添加规则。要添加其中任何一个,只需将它们添加到wpse_119806_rewrite_rules
还有其他呼叫add_rewrite_rule()
.就我个人而言,我不会对字典中的字母使用分类法,但听起来你就是这么做的,所以我就这么做了。如果是我,我会使用自定义查询