Wordpress重写规则和正则表达式

时间:2012-03-30 18:29:14

标签: php regex wordpress

我终于使用`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]+)/(.+)'

但都没有奏效。

1 个答案:

答案 0 :(得分:1)

如果您不需要参考menu/后面的内容,请删除那里的parens,例如

menu/[^/]+/(.+)

如果确实需要引用,请确保将正确的int参数传递给preg_index。

关于“为什么删除parens工作”,因为在第一组[^/]+周围包括parens会创建一个对那里匹配的反向引用。因此,当您致电preg_index(1)时,您要求的是第一场比赛,当您想要的实际上是第二场比赛.+时。你也可以将2传递给preg_index,表示你想要第二个匹配的组......但是如果你不需要第一个匹配,那么首先就是浪费开销来创建引用。< / p>