多个URL重写规则,获取每个PRAM

时间:2020-04-22 作者:Bhautik

我正在创建一个消息系统,其中有4个部分(1)收件箱(2)已发送(3)草稿(4)未读,因此我决定使用WordPress添加重写规则

我已经添加了一个重写规则部分。

add_rewrite_rule(
    \'messages/([^/]*)/?$\',
    \'index.php?pagename=messages&section=$matches[1]\',
\'top\' );
现在,我想在部分是ID(收件箱消息ID)之后再添加一个参数。

为此,我添加了第二个重写规则id。

add_rewrite_rule(
    \'messages/inbox/([^/]*)/?$\',
    \'index.php?pagename=messages&id=$matches[1]&section=$matches[2]\',
\'top\' );
如果我访问https://example.com/messages/inbox 我可以进入query\\u vars

[section] => inbox 
但问题是如果我去https://example.com/messages/inbox/123 我可以进入query\\u vars

[section] => 
[id] => 123
我没有得到节值,在这种情况下,我想在这个URL中检查哪个节是当前的,这就是为什么我需要在这个页面上的节值。

1 个回复
SO网友:Bysander

看到了吧,这在评论和旧版本中已经解决了,但为了避免有人走上错误的道路,我相信这是OP实现其目标的错误方式。

这里一条重写规则就足够了,然后使用匹配项构造查询。

首先,我们需要一个正则表达式,它将匹配您试图解析的整个字符串

像这样的东西会有用的"/^messages\\/(inbox|sent|draft|unread)\\/?(\\d*)?$/"
https://regex101.com/r/33F9Po/1

首先是messages/ 有任何(inbox|sent|draft|unread) 在中间,一个可选的斜杠和第二个可选的匹配数字组位于末尾。

这将允许您的重写规则使用$matches

add_rewrite_rule(
    \'^messages\\/(inbox|sent|draft|unread)\\/?(\\d*)?$\',
    "index.php?pagename=messages&section=$matches[1]&id=$matches[2]",
    \'top\'
);
有关更多信息和示例,请参见法典中的此页
add_rewrite_rule() | Function | WordPress Developer Resources

相关推荐

Problem with permalinks

我已经更改了类别的基本名称,现在它是“博客”,工作正常。但当我通过/blog/%category%/%postname%/更改结构时。显示404。如果我删除结构中的blog,它会再次工作,但我想使用blog word。问题出在哪里?非常感谢。