所以我在一个需要多个permalink结构的站点上遇到了一个情况。现在,我已经知道你要说什么了,因为我看过的每一个Google和SX结果都说了同样的话:Don\'t do this; this is a bad idea; here be dragons; etc. 这些我都听说过了。我已经整理好了链接规范化,og:url和SEO不是问题。
然而,实际情况是,客户机希望在“子目录”中更改现有站点,该子目录具有相同的页面结构,但在模板文件中有一些PHP逻辑。因此,它是相同的内容,但根据将通过此不同URL访问的用户子集的业务规则,页面看起来有点不同。
因此,有了这样的理解,在Wordpress中定义以下内容的最佳方式是什么:
http://www.example.com/abc/ 应重写为http://www.example.com/
http://www.example.com/abc/about/ 应重写为http://www.example.com/about/
等等
我目前有使用手动定义的规则add_rewrite_rule()
:
add_rewrite_rule(\'abc/?$\',\'index.php?page_id=6\',\'top\');
add_rewrite_rule(\'abc/about/?$\',\'index.php?page_id=9\',\'top\');
但这是无法维持的。我想让它像这样
add_rewrite_rule()
调用,但应用于整个站点,理想情况下无需从数据库中逐个查找每个URL。
仅重写,不接受重定向。
有什么想法?
最合适的回答,由SO网友:Ben Dyer 整理而成
我想我找到了一个解决方案,使用了一个不常用的函数:add_permastruct()
.
这就是我上面描述的技巧:
add_rewrite_tag(\'%page%\',\'([^/]+)\', \'pagename=\');
add_permastruct(\'abc\',\'/abc/%page%/\',false);
add_rewrite_rule(\'abc/?$\',\'index.php?page_id=6\',\'top\');
The
add_rewrite_tag()
定义我希望Wordpress查找的pagename值。然后
add_permastruct()
使用该值定义自定义结构。
最后一条规则是手动处理主页。
我相信这只适用于一个层次结构级别,但稍后我可能会回来调整regex以改进它。就目前而言,这符合我的目的。