我正在尝试创建以下URL结构:
example.com/attractions <-- post type archive
example.com/attractions/taxonomy_term <-- taxonomy archive
example.com/attractions/van-gogh-museum <-- custom post type
不幸的是,默认情况下这是不可能的:WordPress需要URL中的分类库,正如SE用户sanchothefat在其对
this question:
。。。如果你不想让分类法slug出现,那么你就没有运气了,你不能让slug与你的帖子类型或其他分类法相同,因为它不知道哪个分类法来自哪个术语,什么是帖子
换句话说,WordPress需要这种永久链接结构:
example.com/attractions/taxonomy_base/taxonomy_term
My question:有没有办法使用WordPress重写API来实现这一点?
我想它包括两个步骤:
从URL中删除分类库告诉WordPress它需要显示什么帖子类型更新1我发现了一个代码段,该代码段应该从URL中删除分类库:
global $wp_rewrite;
$wp_rewrite->extra_permastructs[\'taxonomy_base\'] = array(\'%taxonomy_base%\', EP_NONE);
(
Source - 见页面底部的最后一个答案)
但这并不是一个完整的解决方案,因为WordPress无法判断这篇文章是分类法存档还是文章类型。。。
更新本文件的作者great article 在使用漂亮URL的高级分类查询中,我写道:
你的问题并不太难,但可能有点棘手。重写规则需要知道第二个术语是什么类型的(…)这就是为什么在类别/标记/分类名称前缀前面加上前缀的原因。您可以创建一个重写,以便将/attractions/之后的所有内容都视为分类URL,但这两个操作都有点棘手
更新#3对于有相同问题的任何人,请查看this discussion 在WordPress上回答。尤其是MikeSchinkel的插件代码可能会有所帮助。
下面是一个有趣的WPCandy示例,它将分类法基础和URL中的术语结合在一起:http://wpcandy.com/pros/experienced/with-multisite