修改URL结构通常由两部分组成:一部分修改用代码生成的URL,另一部分处理新结构的传入URL。我将重点讨论第二部分,可能是最不了解的部分。
传入的URL与不同的重写规则相匹配,这些规则是可以匹配URL的正则表达式。这些表达式可以具有捕获组,这些捕获组捕获URL的一部分以将其发送到不同的查询变量,这些查询变量(例如)用于构造数据库查询。如果创建自定义帖子类型slideshow
, 其中一条重写规则如下所示:
slideshow/([^/]+)(/[0-9]+)?/?$
=> index.php?slideshow=$matches[1]&page=$matches[2]
这意味着我们匹配一个以
slideshow/
, 那么任何事情都不是
/
, 和(可选)的
?
) A.
/
和任意位数。第一个匹配将发送到
slideshow
查询变量,与
page
变量例如
slideshow/nature/2
会凝固
slideshow
到
nature
和
page
到
2
. 我写道
a plugin that might be helpful in understanding and debugging your current rules.
您希望匹配以下结构slideshow/nature/slide-2-canyon/
. 此的正则表达式如下所示:
slideshow/ // Start with \'slideshow/\'
([^/]+) // Then anything that is not \'/\'
(/slide- // Then \'slide-\'
([0-9]+) // A page number
(-([^/]+))? // Slide title: \'-\' and anything that is not \'/\'. Optional so you don\'t have to add it
)?/?$ // Which could be followed by a \'/\'
我们要捕获幻灯片名称和页码。计算开头的“(”以获得匹配索引,因此我们的完整重写规则如下所示:
slideshow/([^/]+)(/slide-([0-9]+)(-([^/]+))?)?/?$
=> index.php?slideshow=$matches[1]&page=$matches[3]
现在,我们只需要将其添加到重写规则中。请确保将其放在顶部,因为类似的规则用于匹配帖子的附件,如果自定义规则位于列表底部,则永远不会命中。
add_rewrite_rule(
\'slideshow/([^/]+)(/slide-([0-9]+)(-([^/]+))?)?/?$\',
\'index.php?slideshow=$matches[1]&page=$matches[3]\',
\'top\'
);
只要打一次电话就够了,然后
flush_rewrite_rules()
. 或者,如果您不想弄乱插件激活挂钩,请调用
add_rewrite_rule()
在每个
init
, 然后加载“Permalink”设置页面以刷新规则。只要不刷新每个页面加载上的规则,因为这是一个昂贵的计算。
只剩下生成新格式的页面链接了。wp_link_pages()
似乎没有提供任何过滤器来修改它的输出,所以我会研究它是如何工作的,并用你的页面格式复制它(这并不难,如果你只选择一种输出格式,你只需要一半的函数)。