Php Wordpress重写规则和正则表达式

Php Wordpress重写规则和正则表达式,php,regex,wordpress,Php,Regex,Wordpress,我终于让我的permalinks使用`为自定义帖子类型和分类法工作 我的自定义帖子类型是“菜单”,分类法是“菜单类型” 我写了以下重写: function custom_rewrite( $wp_rewrite ) { $feed_rules = array( 'menu/salads/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1), 'menu/hotboxes/(.+)

我终于让我的permalinks使用`为自定义帖子类型和分类法工作

我的自定义帖子类型是“菜单”,分类法是“菜单类型”

我写了以下重写:

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/[^/]+/(.+)
如果确实需要引用,请确保将正确的int参数传递给preg_索引


至于“为什么删除paren有效”,因为在第一组
[^/]+
周围包含paren会创建对匹配内容的反向引用。因此,当您调用
preg_index(1)
时,您要求的是第一个匹配项,而实际上您需要的是第二个匹配项
+
。您还可以将
2
传递到
preg_index
以指示您想要第二个匹配的组…但是如果您不需要第一个匹配,那么首先创建引用只会浪费开销。

是否需要保存第一个引用(紧接着的是
菜单/
)?如果没有,则移除paren。如果是这样的话,你是否使用正确的参数来建立preg_索引?啊,这完全有效!你能把它作为答案写下来让我检查一下吗?谢谢移除巴拉那人为什么有用?