我终于让我的永久链接使用`helper类为Custom Post Types和Taxonomies工作了。
我的自定义帖子类型是"菜单",分类法是"菜单类型"。
我写了以下重写:
function custom_rewrite( $wp_rewrite ) {
$feed_rules = array(
'menu/salads/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1),
'menu/hotboxes/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1),
'menu/wraps/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1),
'menu/sauces/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1),
'menu/soups/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1),
'(.+)/([^/]+)(/[0-9]+)?/?$' => 'index.php?menutype=' . $wp_rewrite->preg_index(2)
);
$wp_rewrite->rules = $feed_rules + $wp_rewrite->rules;
}
// refresh/flush permalinks in the dashboard if this is changed in any way
add_filter( 'generate_rewrite_rules', 'custom_rewrite' );
唯一的一点是,我不想将分类法(即菜单/酱汁/、菜单/热盒)硬编码到我的重写规则中,因为术语可能会更改(但它们总是小写字母)
我尝试了以下方法:
'menu/([^/]+)/(.+)'
还有:
'menu/([a-z]+)/(.+)'
但两者都不起作用。
如果不需要引用menu/
后面的内容,则删除那里的parens,例如
menu/[^/]+/(.+)
如果确实需要引用,请确保将正确的int参数传递给preg_index。
至于"为什么删除parens有效",因为将parens包含在第一组[^/]+
周围会创建对匹配内容的反向引用。所以当你打电话给preg_index(1)
时,你要求的是第一场比赛,而你想要的实际上是第二场比赛.+
。您也可以将2
传递给preg_index
,指示您想要第二个匹配的组。。。但是,如果不需要第一个匹配,那么首先创建引用只会浪费开销。