添加_重写_规则-页面插件从“/foo-bar/”到“/foo/bar/”

时间:2017-04-18 作者:H21

我需要foo-bar改为foo/bar:

//域。com/foo-bar» //领域com/foo/bar

我正在重建一个目前位于自制CMS中的网站。它们有几个带有子页面的页面,但父页面URL与子页面不匹配。父URL已更改,但子URL从未更新。

Expected Structure:
//域。com/parent//br///域。com/父/子

Current Structure:
//域。com/parentpage/ ;(已从/parent/更改)
//域。com/父/子

我可以为每个页面创建一个页面,但我试图避免出现空的/未使用的页面。

What I\'m hoping to do is just create //domain.com/parent-child/ and rewrite the URL to match, but I can\'t get my rules to take priority over an existing rule.

也许我误解了重写可以完成什么?

添加重写规则

Matched Query:

pagename=foo-bar&page=
My Attempts:我希望我的解决方案是这样的,但我尝试了十几种不同的小变化,但都没有成功:

add_rewrite_rule( \'^foo/bar\', \'index.php?pagename=foo-bar\', \'top\');
add_rewrite_rule( \'(foo)/(bar)\', \'index.php?pagename=$matches[1]-$matches[2]&page=\', \'top\');

Default rule my page is matching:

add_rewrite_rule( \'(.?.+?)(?:/([0-9]+))?/?$\', \'index.php?pagename=$matches[1]&page=$matches[2]\')

2 个回复
最合适的回答,由SO网友:H21 整理而成

这条规则就是我找到这篇文章后得出的结论:Understanding add_rewrite_rule

add_rewrite_rule( \'^foo/([^/]*)/?$\', \'index.php?pagename=foo-$matches[1]\', \'top\' );

SO网友:Oleg Butuzov

首先,你可以改变规则add_rewrite_rule 还有一个过滤器(我在所有常见情况下使用的一个通用方法是rewrite_rules_array). 您将收到一个重写规则数组(您希望将其返回),但您可以稍微更改它。

和(广告分钟)-您也可以使用debug bardebug bar rewrite rules 面板检查您的规则和测试URL,查看优先级/匹配等。我是这个插件(调试栏重写规则面板)的作者,很乐意得到反馈。