我终于使用`a helper class为自定义帖子类型和分类法工作了固定链接。
我的自定义帖子类型是“菜单”,我的分类是“menutype”。
我写了以下重写:
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]+)/(.+)'
但都没有奏效。
答案 0 :(得分:1)
如果您不需要参考menu/
后面的内容,请删除那里的parens,例如
menu/[^/]+/(.+)
如果确实需要引用,请确保将正确的int参数传递给preg_index。
关于“为什么删除parens工作”,因为在第一组[^/]+
周围包括parens会创建一个对那里匹配的反向引用。因此,当您致电preg_index(1)
时,您要求的是第一场比赛,当您想要的实际上是第二场比赛.+
时。你也可以将2
传递给preg_index
,表示你想要第二个匹配的组......但是如果你不需要第一个匹配,那么首先就是浪费开销来创建引用。< / p>