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

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

#1 楼

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



term_id是术语表中的术语ID

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


评论


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

–Daithí
2012年1月2日,18:51



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

–Daithí
2012年1月2日,18:55

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

– J.D.
16-4-19在19:04



#2 楼

食典说:


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

这是什么意思?

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

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

现在,“ fattening”一词作为邮政标签也有一个数字。这是term_taxonomy_id。它对应于“后标签'fattening'”。

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

#3 楼

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

在WP 4.5.3中,仍然存在所有这些表(我将不加前缀地谈论它们) ):


帖子
term_relationships
term_taxonomy
条款

获取帖子术语可读名称的路径通过了它们全部。

帖子
这里的主要标识是ID-帖子的ID(任何类型)

term_relationships
存储以下内容对:
object_id-可以是posts.ID(但不一定是)
term_taxonomy_id-这不是术语(类别)的ID,而是术语(类别)和分类法(“类别类型”之间的RELATIONSHIP的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


#4 楼


术语本身不是类别或标记。必须通过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,它们都所谓的自定义分类法。
此表还绑定了父/子结构。最终表term_relationships带有parent列。最终表term_relationships将诸如post或链接之类的对象与term_taxonomy表中的term_taxonomy_id相关。


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

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

#5 楼

文章“了解并使用WordPress中的分类法和术语”说明了使用两个单独的表的原因-wp_termwp_term_taxonomy

在许多WordPress安装中,每个wp_term_taxonomy表中都有一条记录wp_terms表中的术语,但在某些情况下,每个术语将有多个记录。当您在不同的分类法中创建具有相同名称和子词的两个术语时,就会发生这种情况,这意味着您可以创建查询以在多个分类法中输出具有该术语的帖子。
这意味着这两个表之间的关系是一个多对多:wp_terms table中的一条记录可以链接到wp_term_taxonomy表中的多条记录,但是wp_term_taxonomy中的每条记录仅链接到wp_terms中的一条记录。