我有一个post类型“destinations”,它应该在没有自定义post类型slug的情况下工作,但它应该是分层的。因此可以存在这样的页面:/madagascar/grouptrip/information
我想创建一个重写规则,以匹配主要父母(马达加斯加和乌干达),并匹配所有子页面的层次结构。所以我看了一下用于页面的重写规则:
(.?.+?)?(:/([0-9]+))?/?$
在前面加上我的主要父母:
add_rewrite_rule(\'(madagascar|uganda)/(.?.+?)?(:/([0-9]+))?/?$\', \'index.php?destination=$matches[1]/$matches[2]&page=$matches[4]\', \'top\');
这适用于我的示例url
/madagascar/grouptrip/information
但是如果我在末尾添加页码
/madagascar/grouptrip/information/2
它不起作用了。对于我复制的页面,regex匹配了完全相同的结构。只有当我从正则表达式中删除冒号时,重写规则才起作用,我不明白为什么?
So to sum it up:
(.?.+?)?(:/([0-9]+))?/?$
正在为以下结构工作:
/pagename/subpage/2
但是:
(madagascar|uganda)/(.?.+?)?(:/([0-9]+))?/?$
不适用于以下结构:
/madagascar/subpage/2
以及:
(madagascar|uganda)/(.?.+?)?(/([0-9]+))?/?$
正在工作。为什么复制的regex不起作用?
SO网友:Levi Dulstein
所以冒号的问题是它没有特殊的含义,所以您的正则表达式需要匹配:/
字面上讲,这适用于具有以下结构的字符串:
/madagascar/subpage:/2
您将获得一场全场比赛和4组比赛:
array
(
[0] => \'madagascar/subpage:/2\'
[1] => \'madagascar\'
[2] => \'subpage\'
[3] => \':/2\'
[4] => \'2\'
)
但是,由于冒号不在测试字符串中,因此只能得到一个完整匹配和两组(仅部分
(madagascar|uganda)
和
(.?.+?)?
检测阳性)
array
(
[0] => \'madagascar/subpage/2\'
[1] => \'madagascar\'
[2] => \'subpage/2\'
)