WordPress Rewrite_Rules和Rewrite_Tags PHP函数的正则表达式问题

时间:2014-05-12 16:56:00

标签: php regex wordpress rewrite

我不是一个伟大的正则表达式的头脑,但我觉得这是我的代码在这里的问题,并想知道是否有人可以提供更好的眼睛。

代码就是这个PHP ......

function add_results_rewrite_tags() {
add_rewrite_tag('%resultant%','([^0-9]+$)');
}
add_action( 'init', 'add_results_rewrite_tags' );

function add_results_rewrite_rules() {
add_rewrite_rule('^([^&]+)/your-result/([^0-9]+$)/?$','index.php?    
name=$matches[1]&resultant=$matches[2]','top');
}
add_action( 'init', 'add_results_rewrite_rules' );

我期望发生的是,http://deja1987shadow.wpengine.com/test-post/your-result/five/之类的网址会导致404找不到错误,而格式为http://deja1987shadow.wpengine.com/test-post/your-result/5/的网址会返回找到的网页。

但是,我实际上得到了相反的结果...以/ five /(或其他文本)结尾的网址会出现'hit',而像/ 5 /这样的数字结尾会出现404!

在我看来,我必须正确地制作我的正则表达式模式,但我不明白为什么我这么错。我可能也会以某种方式错误地使用这些wordpress函数,但是我觉得我已经把这个部分弄得很好了......显然当一些URL包含/ your-result /时,我没有得到404,这正是这些功能的意义所在。现在我只想确保只有“结果”的数值会导致命中。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你的正则表达式的第一部分与帖子网址相匹配。我假设第一场比赛是字母数字。此外,这是一个Apache RewriteRule,因此不会成为$ matches变量,只是一个正则表达式占位符。

function add_results_rewrite_rules() {
    add_rewrite_rule(
        '^([A-za-z\-]+)/your-result/([0-9]+$)/?$',
        'index.php?name=$1&resultant=$2',
        'top'
    );
}