Wordpress add_rewrite_rule不返回$ matches []数组项

时间:2014-08-06 17:22:53

标签: php regex wordpress .htaccess wordpress-theming

我正在尝试匹配以下网址:

planets/animals-and-more/animal/human

要:

index.php?pagename=animal&animal-name=human

页面'动物'有一个自定义的page-animal.php模板,可以输入动物名称'查询变量并将其吐入。

我已经设置了重写标记:

function animal_custom_rewrite_tag() {
    add_rewrite_tag('%animal-name%', '([^&]+)');
}
add_action('init', 'animal_custom_rewrite_tag', 10, 0);

重写规则:

function add_some_rewrite_rules() {
    global $wp_rewrite;
    add_rewrite_rule('^planets/animals-and-more/animal/[a-zA-Z0-9]*$','index.php?pagename=animal&animal-name=$matches[4]','top');
    $wp_rewrite->flush_rules();
}
add_action( 'init' , 'add_custom_ncta_rewrite_rules' );

如果我在类似' animal-name = monkey'中对字符串进行硬编码,则重写规则有效,但似乎匹配[n] 数组不会工作。

我知道通过修改htaccess可以实现这一切,但我需要一个Wordpress解决方案。

任何想法为什么$匹配[]根本不起作用?

1 个答案:

答案 0 :(得分:2)

发现它!

This article from theme.fm提到 matches [n] 数组仅适用于括号括起来的正则表达式中的组。例如:

要获得$ matches 1在返回'planetts / animals-more-animal / human'时返回'human',重写规则需要如下所示:

add_rewrite_rule('^planets/animals-and-more/animal/([a-zA-Z0-9-_]+)$','index.php?pagename=sponsorship&sponsorship_item=$matches[1]','top');

在您想要“匹配”的群组周围加上()。