term_id和term_taxonomy_id有什么区别


20

标题说明了一切。目前,在我的自定义分类法中,我正在使用术语ID和分类法名称来获取术语。

以为以前会问过这个问题,但在任何地方都找不到!因此,以为我会问一下是否有人有任何答案。

Answers:


21

如果您查看Wordpress文档,则会发现Wordpress分类法

  • term_id是术语表中术语的ID
  • term_taxonomy_id是术语+分类对的唯一ID。

因此仅基于term_id操作和获取术语不会导致重复吗?
Daithí

1
实际上只是回答了最后一个问题。看了wp_terms表,并且仅使用term_id是安全的。感谢您的回复@Juan
Daithí

2
请注意,在WordPress 4.2中,所有术语均被拆分,这意味着每个术语term_id现在仅在term_taxonomy表中出现一次(此列不是唯一的,并且术语可以在分类法中共享)。根据分类路线图,这种情况将来可能会继续发展。其中一部分是合并术语和术语分类表
JD

11

食典说:

  • term_id是术语表中术语的ID
  • term_taxonomy_id是term + taxonomy对的唯一ID

这是什么意思?

术语是一个词。它可以属于一个分类法,例如标签,类别或自定义分类法。问题是:可以有几个包含相同术语的分类法。

假设您有一个术语“ fattening”。这个单词有一个ID号。这是term_id。它不取决于该词的使用方式,即该词出现在哪些分类法中。

现在,作为帖子标签的“ fattening”一词也有一个数字。这是term_taxonomy_id。它对应于“ post tag'fattening'”。

也许您还有一个名为“脂肪”的类别。虽然term_id相同,但“ fattening”类别的term_taxonomy_id不同。


5

因为这是对设计的更深入了解的一部分,所以我将对它进行整体描述... :)

在WP 4.5.3中,仍然存在所有这些表(我将在不带前缀的情况下讨论它们):

  • 帖子
  • term_relationships
  • term_taxonomy
  • 条款

获得词条可读名称的途径贯穿了所有这些。


在这里发布主要标识符ID- 帖子的ID(任何类型)

term_relationships
的商店对:
object_id- 可以posts.ID(但不是必须)
term_taxonomy_id-这是不是一个项(类)的ID,但一个的ID 关系中的一项(类)和分类之间(“类别类型”)

term_taxonomy
这里的主要标识符在term_taxonomy_id^^上方描述
:另一个重要的列:
term_id- 术语的ID(类别)
taxonomy-存储术语的分类法(“类别类型”)

这可能看起来很有趣,但是最初的意图是增加术语具有更多分类法的能力(在某些情况下可能是有道理的)。

术语
,这里的主要标识符是term_id-类别的ID,
此处还有其他重要的列是:
name-可读的类别名称,例如“音乐流派”
slug-可用的术语,例如URL

因此,残酷地演示SQL来
获取所有已发布的帖子以及所有带有类别名称的类别,
如下所示(在您自己的WP DB上进行测试时,在表中添加前缀):

SELECT * FROM
posts #gets posts
LEFT JOIN
term_relationships #gets posts relationships to term_taxonomies
ON(posts.ID=term_relationships.object_id)
LEFT JOIN
term_taxonomy #gets term_ids 
ON(term_relationships.term_taxonomy_id=term_taxonomy.term_taxonomy_id)
LEFT JOIN
terms #finally, gets terms' names
ON(term_taxonomy.term_id=terms.term_id)
WHERE (
    (posts.post_status='publish') 
    #optionally you can filter by a certain post_type:
    #AND
    #(posts.post_type='some_post_type')
)
ORDER BY posts.ID ASC

2

术语本身不是类别或标签。必须通过term_taxonomy表为其提供上下文。

term_taxonomy表将术语放置在分类法中。这就是使术语成为自定义分类法(或分类法组合)的类别标签或一部分的原因。

term_id 是条件表中一个条件的ID。

term_taxonomy_id 是术语+分类对的唯一ID。

term_id始终是唯一的,就像term_taxonomy_id。两者Auto Increment在表结构中都有一个。

该表wp_term_taxonomy可以确保例如,一个类被创建,所以WordPress的可以用它如Woocommerce用途的干扰:product_tagproduct_typeproduct_cat,所有的人都是所谓的自定义分类。该表还绑定了父/子结构。随着它的专栏parent

最终表term_relationships将诸如post或链接之类的对象与term_taxonomy表中的term_taxonomy_id相关联。

如果我们再次选择Woocommerce作为示例,则该表会将帖子类型链接products到其分类法product_cat,其中包含一个名词,例如Computers,当然可以从该表中检索到wp_terms。这个表格包含term_idnameslugterm_group。(我个人从未使用过的term_group)

希望以上内容可以使它们之间的差异以及Wordpress如何使用这些表的事情变得更加清楚。

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.