Wordpress重写规则和正则表达式


Wordpress rewrite rules and regex

我终于让我的永久链接使用`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,指示您想要第二个匹配的组。。。但是,如果不需要第一个匹配,那么首先创建引用只会浪费开销。