自定义分类法是一个神奇的存在,有了它,再请文章类型帮点忙,WordPress 就能摇身一变,从一个博客程序转变成一个强大的 CMS。自定义分类法和文章数据表相互关联,来实现 WordPress 强大灵活的分类系统,从数据库结构上来看,文章和自定义分类法之间的关系是多对多关系,这也是WordPress Database中唯一的多对多关系。下面我们来深入了解一下 WordPress 的自定义分类法。
首先,让我们弄明白什么是自定义分类法
自定义分类法是什么
分类法是用来归纳和分类事物的一种系统,通常分类法是分级别的,一个在生物界比较知名的分类系统林奈分类法(Linnean Taxonomy )就是一种分类法方法,该分类法用来给生物分类。
在 WordPress 中,分类法被用来给文章数据分类和分组。WordPress 默认有两种分类法:
- categorized directory
- tab (of a window) (computing)
分类目录和标签之间的关系有点类似文章和页面之间的关系,数据类型一样,前端表现不同(分类目录和标签都是分类方法,文章和页面都是内容类型)。
我们也可以根据需要额外添加自定义分类法,自定义分类法在后台界面上的表现类似于分类目录或标签,每个自定义分类法的地位个内置的分类法一样,这一点与自定义文章类型和内置的文章类型之间的关系也非常相似。
自定义分类法项目
每个分类法都可以添加分类项目用来分类我们的数据,标签是标签分类法中的分类项目。当我们创建自定义分类法后,我们可以通过后台或 wp_insert_term() 函数插入分类项目。
结合自定义查询使用是,分类法项目可以非常强大:我们可以在主题或插件中创建自定义模板来显示多个分类法项目里面的文章,通过多个分类项目筛选数据等等。
WordPress 是怎么存储自定义分类法和自定义分类法项目的
本文开头提到过,分类法和文章之间的关系多对多关系,而分类法和分类法项目之前的关系却是一对多关系,一个分类法可以有多个分类项目,而一个分类项目却只能有一个分类法,同事,分类项目与分类项目自身也有一个一对多的关系,主要用来实现多级分类。
- wp_term_relationships 分类项目和文章之间的关系表
- wp_term_taxonomy 分类项目和分类法之间的关系,以及分类项目和自身的关系数据表
- wp_terms 分类项目表
我们可以通过下图直观的了解一下这几个数据表之前的关系:
下面,我们来看一下上图中的各个数据表和他们的工作原理
wp_terms 数据表
wp_terms 存储着分类目录、标签、和自定义分类法中的分类项目,每行数据有以下4个字段:
- term_id 自定义分类法项目的唯一 id
- name 分类项目名称
- slug 分类项目别名
- term_group 目前,WordPress 中没有使用这个字段,我们可以忽略不管
wp_term_taxonomy 数据表
wp_term_taxonomy 数据表保存着分类项目所属的分类法方法,以及分类项目和自身的关系数据,该表有以下几个字段:
- term_taxonomy_id 记录 ID
- term_id 分类项目的 ID,链接到 wp_terms 中的记录
- taxonomy 分类项目所在的分类法名称
- description 分类项目描述
- parent 分类项目的分级分类项目
- count 分类项目中包含的文章数量
在大部分 WordPress 安装中,每个 wp_terms 数据表对应的,wp_term_taxonomy 只有一条记录,但是在一些特殊的情况下,wp_term_taxonomy 中可能会有两个名称和别名相同的分类项目,他们只有分类法不同,这就意味着我么可以根据分类目录输出属于不同分类法的文章。
也就是说,wp_terms 和 wp_term_taxonomy 数据表之间的关系是一对多的关系,wp_terms 数据表中的一条记录可以链接到 wp_term_taxonomy 数据表的记录,一个分类项目可以属于不同的分类法,而 wp_term_taxonomy 数据表中的每条记录只能链接到一个分类项目。.
wp_term_relationships 数据表
wp_term_relationships 数据表是文章和分类项目之间的关系表,文章和分类项目通过这个数据表建立了多对多关系,该表只有3个字段:
- object_id 链接到 wp_posts 数据表中的 post_id
- term_taxonomy_id 连接到 wp_term_taxonomy 数据表中的分类项目 ID
- term_order 分类项目关联到文章对象的顺序,这个字段只有创建分类法时的sort参数设置为 true 时才有用,该字段的默认值为0。
summarize
文章和分类项目之间的关系非常强大,他们之间的关系是 WordPress 中唯一的多对多关系,理解了分类法和分类项目之间的关系,以及他们在数据库中的存储方式,有助于我们深入了解 WordPress 的运行方式,帮助我们使用相关功能。