更改帖子的URL结构通常包括两部分:在链接中写入新的URL,以及处理新的结构。
处理新结构很容易:因为帖子名称(slug)足以识别帖子,所以我们可以忽略URL中使用的分类法。理论上,您应该能够使用任何分类法,但在实践中,如果没有一些额外的调整,您就不能使用任何分类法。
如果您使用%category%
, the redirect_canonical()
function 启动并尝试将URL中具有术语的所有请求从另一个分类法重定向到具有类别的请求(因为每个帖子仅使用一个URL将防止相同内容的页面排名分散)。当您的所有URL似乎都转到/uncategorized/[post-name]/
. 您可以完全取消钩住函数,或者钩住它,如果不需要的话,可以阻止重定向。
另一种选择是在permalink结构中使用一种自定义分类法。这将防止redirect_canonical()
但是由于an oversight 在自定义分类法的WP 3.0版本中,它不会生成分层重写规则(这将在3.1中修复)。
我尝试的是创建一个“虚拟”重写结构,名为%anything%
, 哪个匹配.+?
(什么都可以,但不要贪心)。在这种情况下,您还应该重新启用详细页面规则,因为WordPress没有注意到发生了什么事情。
add_action(\'init\', \'wpse9346_init\');
function wpse9346_init()
{
$GLOBALS[\'wp_rewrite\']->add_rewrite_tag( \'%anything%\', \'(.+?)\', \'wpse9346_dummy=\' );
$GLOBALS[\'wp_rewrite\']->use_verbose_page_rules = true;
}
The
wpse9346_dummy
参数被忽略,因此使用它应该是相当安全的。我现在的重写结构是
/%anything%/%postname%/
.
编写新结构的URL这是您必须思考的部分:如果一篇文章可以用不同分类法中的术语进行标记,那么我们应该使用什么分类法来创建指向该文章的链接?假设我们有一个国家分类法,一个政府办公室分类法。关于穆巴拉克的帖子将贴上Egypt
在一个分类法和President
在另一个。帖子URL是否应为/egypt/mubarak-steps-down/
或/president/mubarak-steps-down/
? 这两个URL都可以工作并最终位于同一个帖子,但如果您使用我的%anything%
permalink上方的解决方案将具有%anything%
这当然是无效的。因此,钩住post_link
并按需要修改URL。