为什么get_term()需要分类法?term_id是否不唯一?


8

一个相关的WPSE问题询问如何仅通过指定ID而无需指定分类法来获得该术语。我的问题更具哲学性。通常,WP核心中的内容是有原因的。我试图理解为什么term_id不能成为该术语的主键-为什么我们也需要分类法?单个术语记录可以成为多个分类法的成员吗?目前肯定不支持该API。是否有可能需要这样做的用例?

还是在数据库结构的早期版本的残留痕迹中需要$taxonomy参数get_term()


3
我不确定,但是我认为更多的是性能问题,因为wp_term_taxonomy表的分类字段用作该表的索引,这使查询速度更快(即使只是一个术语)。
Bainternet

@Bainternet请看我A. EXPLAIN说的结尾term_id
kaiser

1
我认为这是残留痕迹。使用Trac记录票证:core.trac.wordpress.org/ticket/20536
Tom Auger

Answers:


3

我已经用trac记录了与此相关的票证:http : //core.trac.wordpress.org/ticket/20536

但是,事实证明暂时是有必要的,因为WordPress当前(自2.x起)有一个错误,确实会将具有相同名称的两个术语关联到相同的term_id!因此,一个词有可能(尽管不正确)与多个分类法相关联。看到这个错误:http : //core.trac.wordpress.org/ticket/5809

它涉及面很广,因此实施此修复程序需要非常彻底的单元测试。如果有任何发展,我会尽量记住要更新此问题。


这是DEFINITELY的情况下!这个错误使我无法进行大型(数百个)多站点安装...非常奇怪。并且请注意,该错误已存在5年了...但是,该修补程序计划包含在3.6版本中,因此实际上可能已得到修复!(最后!:))
rinogo

感谢您更新此问题以选择正确的答案,汤姆!希望这将对将来解决此问题的人们有所帮助。并感谢您的答案/链接。非常有帮助。
rinogo

1
提醒您更新此问题 -顺便说一句,是否有术语别名不存在?
kaiser

嗨@kaiser,用什么更新它?我不确定是否有任何进一步的积极行动来解决提到的Trac问题。
Tom Auger

目前,它的目标设置为3.7-early。让我们看看发生了什么。有什么不见了?由于我所阅读的内容已经进行了单元测试,所以最后还不太了解。
kaiser

1

为什么还需要分类法?单个术语记录可以成为多个分类法的成员吗?

否。条款有条款支持条款归档。在某些永久链接的情况下,两次塞子会带来很多陷阱或“陷阱”。

是否有可能需要这样做的用例?

是的:假设你有如条款size,并有三个名为分类lengthwidth 以及height(你也能想到的颜色)。但这由于上述原因而不受支持。

通常,WP核心中的内容是有原因的。我试图理解为什么term_id不能成为该术语的主键-为什么我们也需要分类法?

通过查看表格并运行EXPLAINterm_id 主键。我猜在较大的系统上,使用(慢速)联接仅查询分类法特定术语可能比查询所有术语,对其进行排序和过滤所需内容更快。


从事态的角度来看,它要么是错误的(可能是以前的模式遗留下来的),要么是将来可能会允许您有重复的段(不太可能)的情况。无论如何,我不确定您是否回答了我的问题。
Tom Auger

@TomAuger“是否有需要的用例”:是的。但是权重更多。税种A中的术语可以与税种B中的术语具有相同的名称,例如,其含义不同。因此,如果您要在分类法“重要性”和“运输成本”中查询“重量”,那么“真正重”又会带来什么?
kaiser

是的,但是这里我们谈论的是术语ID,而不是术语NAME。ID已经完全消除了该术语与任何其他可能具有相同名称的术语(在任何分类法中)的歧义。请注意,这不是数据库问题,而是更多有关为什么将其保留在核心代码中的问题。
Tom Auger 2012年

@TomAuger如果您在12月底跟踪此问题,将会更加容易。我现在将再次研究这个问题:/
kaiser 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.