服务粉丝

我们一直在努力
当前位置:首页 > 财经 >

一文详解 WordPress 的分类模式设计:各个 Term 表之间的关系

日期: 来源:WordPress果酱收集编辑:牛逼闪闪的Denis

WordPress 2.3 版本之前文章只有分类的, 2.3 版本之后才增加了标签,所以可以说 WordPress 2.3 引入了新的分类模式,新的模式将取代 categories,post2cat 和 link2cat 这三个数据表,并引进三个新的更灵活的数据表:termsterm_taxonomy 和 term_relationships 表。

terms 表

第一个是 terms 表,它保存 term 的基本信息。

term_id bigint(20) unsigned NOT NULL auto_increment,
name varchar(200) NOT NULL default '',
slug varchar(200) NOT NULL default '',
term_group bigint(10) NOT NULL default 0,
PRIMARY KEY (term_id),
KEY slug (slug($max_index_length)),
KEY name (name($max_index_length))
字段描述
term_idterm 的唯一 ID
nameterm 的名字
slug用于 URL 中,使得 URL 更加友好
term_group用于把相似的 terms 集合在一起

term_taxonomy 表

一个 term 不能由它自己决定是 category(分类)还是 tag(标签),它必须通过 term_taxonomy 这个数据表来决定:

term_taxonomy_id bigint(20) unsigned NOT NULL auto_increment,
term_id bigint(20) unsigned NOT NULL default 0,
taxonomy varchar(32) NOT NULL default '',
description longtext NOT NULL,
parent bigint(20) unsigned NOT NULL default 0,
count bigint(20) NOT NULL default 0,
PRIMARY KEY (term_taxonomy_id),
UNIQUE KEY term_id_taxonomy (term_id,taxonomy),
KEY taxonomy (taxonomy)
字段描述
term_taxonomy_idterm+taxonomy 对的唯一 ID
term_idterms 表外键 ID
taxonomy指定了 term 属于什么分类模式,默认的分类模式有 “category”,“link_category” 和 “post_tag”。
parent指定 terms 在 taxonomy 中层次关系
description指定 term 在 taxonomy 中定义的描述
count记录在每个 term+taxonomy 对中有多个对象,比如 taxonomy 为 “category”,则 count 记录了有多少篇文章在这个分类中。

term_relationships 表

最后一个表 table,term_relationships,把如 posts 和 links 这些对象和 term_taxonomy 表中的 term_taxonomy_id 联系起来。

object_id bigint(20) unsigned NOT NULL default 0,
term_taxonomy_id bigint(20) unsigned NOT NULL default 0,
term_order int(11) NOT NULL default 0,
PRIMARY KEY (object_id,term_taxonomy_id),
KEY term_taxonomy_id (term_taxonomy_id)
字段描述
object_idpost 或者 link 的 ID
term_taxonomy_id来自 term_taxonomy 表的外键 ID
term_order指定了显示的顺序

拆分共享

新的分类模式模式和 Taxonomy API 的灵活性意味着插件能够能够非常容易增加新的分类模式和对象类型,甚至不同的分类模式可以共享 term,WordPress 4.2 之前确实是这样做的,支持不同的分类模式共享一个 term,比如同时有一个「使用技巧」的标签和分类,他们使用同一个 term。

但是这样设计很大的问题,因为在分类编辑页面,把「使用技巧」改成「WP使用技巧」,然后标签「使用技巧」也跟着改了。

这样是不是最好的设计,肯定不是,所以 WordPress 4.2 之后这个共享机制就取消了,不允许共享了,现在同时有一个「使用技巧」的标签和分类,他们不是同一个 term,会生成两个term。

所以如果某种程度上说,term 和 term_taxonomy 表是一一对应了,他们其实可以合并成一个表,但是 WordPress 为了考虑兼容问题就保留下来,看看 WordPress 的发展历程,和设计的修改,其实对我们自己设计一些系统是很有帮助的。



点击卡片关注「WordPress果酱」 
每天分享 WordPress 使用技巧 

⏬⏬ 下载 WPJAM Basic 请点击阅读原文

相关阅读

  • 波波:不在疫情里死亡,就在疫情里爆发

  • 点下方卡片关注我5月份了,我们内部定位爆破月,就是敢于做动作,当然,不是你敢于做动作,就一定能有收获。但是,我们算了一笔账,现在流量这么大,每天光内容粉丝进私域就有1300-1500人,我
  • 想躺平,不想努力,可以吗?

  • 这几年,「内卷」「躺平」「摸鱼」这样的说法屡见不鲜,似乎越来越多的人开始变得更加「佛系」了。但与此同时,我们的传统文化,以及市面上各种心灵鸡汤,又在鼓励大家要「上进」,要「
  • React 设计原理【送书】

  • 文末送书大家好,我是童欧巴。喜迎新年,给堂友们搞几波送书福利,在此感谢博文视点大力支持,具体送书规则请移步文末。React 从 v15 升级到 v16 后重构了整个架构,v16 及以上版本一
  • B端视觉 | 项目里全是表格页该怎么做加分设计?

  • 表格页面是B端项目中最重要的页面类型,所以我们在前面分享了不少关于表格相关的规范和设计思路。案例解析 | 10个表格加分项设计(加了亿点点细节年前最后一篇长干货,B端表格规

热门文章

  • “复活”半年后 京东拍拍二手杀入公益事业

  • 京东拍拍二手“复活”半年后,杀入公益事业,试图让企业捐的赠品、家庭闲置品变成实实在在的“爱心”。 把“闲置品”变爱心 6月12日,“益心一益·守护梦想每一步”2018年四

最新文章

  • 为什么建立 WordPress 个人博客?

  • 看到知乎上有人问「你们建立 WordPress 个人博客的目的是什么?」,我认真回答了一下,虽然是很长很长的流水账,但是觉得自己的写得挺好的,就全文转载回公众号了。
  • WordPress 技巧:获取 Term 的分类模式

  • WordPress 竟然没有一个根据 $term_id 获取分类模式 taxonomy 的函数,那就自己写一个:function get_term_taxonomy($id){ $term = get_term($id); return ($term && !is_wp_er
  • 哇,WordPress 20岁了!

  • 2023 年是 WordPress 诞生 20 周年,想想一下,如果没有 WordPress,我们会在哪里?在过去的二十年,许多技术栈和趋势来来往往,但 WordPress 坚持却得到蓬勃发展。相信这一切应该归功
  • PHP 中如何为函数创建别名

  • 我们知道 PHP 有一个为类创建一个别名的函数:class_alias,比如我们有个类名字是 WPJAM_Items,我们希望使用 WPJAM_Item 时候也有同样的效果,可以使用下面的代码为类 WPJAM_Items