我正在创建一个消息系统,其中有4个部分(1)收件箱(2)已发送(3)草稿(4)未读,因此我决定使用WordPress添加重写规则
我已经添加了一个重写规则部分。
add_rewrite_rule(
\'messages/([^/]*)/?$\',
\'index.php?pagename=messages§ion=$matches[1]\',
\'top\' );
现在,我想在部分是ID(收件箱消息ID)之后再添加一个参数。
为此,我添加了第二个重写规则id。
add_rewrite_rule(
\'messages/inbox/([^/]*)/?$\',
\'index.php?pagename=messages&id=$matches[1]§ion=$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中检查哪个节是当前的,这就是为什么我需要在这个页面上的节值。
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§ion=$matches[1]&id=$matches[2]",
\'top\'
);
有关更多信息和示例,请参见法典中的此页
add_rewrite_rule() | Function | WordPress Developer Resources