当存在多个分类时,如何重写URL以使用%Taxonomy%而不是%CATEGORY%?

时间:2011-02-15 作者:Adam

我希望可以选择在url中使用分类法,而不是只使用“未分类”这样的类别请注意,我有多种分类法(国家、州等),其中一些有数千个术语(如果这很重要的话)。

编辑:我没有提到这是另一个问题的分支:Pros and cons of using [taxonomy name] in place of [category name]?

目标是一个看起来像域的永久链接。com/2011/taxonomy-term/post-name。

因此,如果我有一个名为countries的分类法和一篇关于埃及的帖子,我希望能够将埃及术语插入该url。

1 个回复
SO网友:Jan Fabry

更改帖子的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;
}
Thewpse9346_dummy 参数被忽略,因此使用它应该是相当安全的。我现在的重写结构是/%anything%/%postname%/.

编写新结构的URL这是您必须思考的部分:如果一篇文章可以用不同分类法中的术语进行标记,那么我们应该使用什么分类法来创建指向该文章的链接?假设我们有一个国家分类法,一个政府办公室分类法。关于穆巴拉克的帖子将贴上Egypt 在一个分类法和President 在另一个。帖子URL是否应为/egypt/mubarak-steps-down//president/mubarak-steps-down/? 这两个URL都可以工作并最终位于同一个帖子,但如果您使用我的%anything% permalink上方的解决方案将具有%anything% 这当然是无效的。因此,钩住post_link 并按需要修改URL。

结束

相关推荐

Performance on WPMS

我的WPMS站点托管在8核/32mb RAM服务器上,但响应时间非常长。我们有大约1000个博客(单个db上有35000多个表)和70000个页面浏览量。我认为我可以缩短响应时间,将具有更多页面浏览量的博客移动到单独的DB中,并使用hyper DB插件将所有博客拆分为每个DB 100个博客。你觉得怎么样?