如果您连接到“rewrite\\u rules\\u array”过滤器,在$rules上执行print\\r,您将看到巨大的preg-match键值对。
add_filter( \'rewrite_rules_array\',\'mess_with_rewrite_rules\' );
function mess_with_rewrite_rules( $rules ) {
print_pre($rules);
return $rules;
}
查看规则在堆栈中的位置。WordPress在这个列表中循环查找与键匹配的任何内容,这些键是regex模式,并通过preg\\u match()将捕获的值应用到关联的值。我不确定,但我怀疑在第一场比赛中,它会停止寻找。因此,如果标记处于post\\u标记意义,它将停止查找。这可能就是为什么它没有达到你的目的。
如果我错了,那就意味着WordPress没有停止寻找,但我怀疑情况是否如此。由于标记在post\\u标记分类法中不存在,因此它返回404。尝试在post\\u标签中设置一个具有相同slug的术语,看看您是否最终使用该术语。
我认为没有办法按你的要求去做。WordPress可以通过URI知道您在寻找什么的唯一方法是永久链接的模式。如果你有两个模式相同的东西,那么就没有信息来区分这两个。
Solution A: 改用层次分类法。将标记转换为可以容纳两组术语的层次分类法。我怀疑主要的问题是用户界面。通过使post\\U标记具有层次结构,元框将切换到类别样式复选框列表。如果要维护非层次标记结构,可能需要创建一个自定义元盒,以仅包含“event\\u tags”的子级,并为其他所有子级创建另一个元盒。
Solution B:更改“event\\u tags”模式。例如,您可以使用/tag/events/。然后插入一个特殊的图案/tag/events/(.+?)$%i
. 通过将其插入重写规则数组的顶部,它将首先匹配并停止查找。然后可以将匹配的术语应用于index.php?taxonomy=event_tags&term_slug=$matches[1]
这是可行的,但它会破坏任何slug碰巧是“events”的post\\u标记。
注意:我不知道term\\u slug是否是正确的查询变量,我只是在猜测。通过查看“重写规则”数组,并找到自定义分类法的其他用法的示例,可以了解这一点。