使额外参数成为可选参数

时间:2012-01-25 作者:mister_c

我已经设置了一个非常具体的函数,它工作得很好,但我想将参数设置为可选的,但我无法处理regex位:

add_rewrite_rule(\'whats-on/([^/]+)/([^/]+)/([^/]+)/?$\', \'index.php?page_id=71&event_year=$matches[1]&event_month=$matches[2]&event_day=$matches[3]\',\'top\');
/whats-on/2012/01/25 我将展示这一天的所有活动。

/whats-on/2012/01 转到404,但我希望该参数是可选的,这样我可以显示所有一月日期,对于/whats-on/2012 2012年的所有日期

任何帮助都将得到感激-谢谢

3 个回复
SO网友:Otto

两点:

你的规则不是特别具体。对于数字匹配,您应该具体说明,并指定a)位数和b)位数。年份将是([0-9]{4}), 月/日为([0-9]{1,2}).

只有一条规则是做不到的。改为添加三条单独的规则。

add_rewrite_rule( \'whats-on/([0-9]{4})/?$\', \'index.php?page_id=71&event_year=$matches[1]\',\'top\');
add_rewrite_rule( \'whats-on/([0-9]{4})/([0-9]{1,2})/?$\', \'index.php?page_id=71&event_year=$matches[1]&event_month=$matches[2]\',\'top\');
add_rewrite_rule( \'whats-on/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\', \'index.php?page_id=71&event_year=$matches[1]&event_month=$matches[2]&event_day=$matches[3]\',\'top\');

SO网友:2hamed

以下是正确的正则表达式:

add_rewrite_rule(\'whats-on/([^/]+)/([^/]*)/([^/]*)/?$\', \'index.php?page_id=71&event_year=$matches[1]&event_month=$matches[2]&event_day=$matches[3]\',\'top\');
请注意*s而不是+s、 我想在你的url中至少year 必须提供参数,因此我将+ 此处未更改。Update: 我又检查了一遍,发现有一个? 丢失的以下是正确的模式:

(^whats-on/([^/]+)/([^/]*)/?([^/]*)/?$)

SO网友:Frank Nocke

我很幸运

add_rewrite_rule(\'foo/bar/?([^/]+)?/?$\',\'index.php?pagename=whatever\',\'top\');
匹配foo/bar, foo/bar/ 而且foo/bar/optionalParam

所谓的不匹配括号(?:(/.*)) 顺便说一句,不要工作。我甚至没有在重写数组中正确结束。要检查这些内容:

我强烈建议您获得(免费)Monkeyman Rewrite Analyzer 要查看您的规则是否有效,并且同样重要,请查看它们与作为角色模型的常规wordpess规则的比较。最好坚持他们的惯例。

结束

相关推荐

Custom URl parameter

我有Wp博客,需要在分类页面上接收一个自定义参数,以过滤像我的规则这样的帖子。例如:http://mysite.com/category/teste?myvar=ABC如何从URL获取myvar?我在网上尝试了很多例子,但没有一个适合分类页面。谢谢