分类法(Taxonomies)使 WordPress 从一个博客系统走向了CMS系统,那么,这些分类法是如何存储在数据库中的?
分类法(Taxonomies)和分类项(Terms)是非常强大的 WordPress 功能,让你可以更加灵活地定制你的网站。它们与两种内容类型有关:文章和链接。数据库结构意味着这是一个一对多的关系,就是说一篇文章可以有多个分类项多种分类法,并且一个分类项可以分配到多个文章或链接。
我将从定义开始介绍它们,正如 WordPress 的其他东西一样,这些术语(terminology)可能会很混淆!
定义
分类法
一个分类法是一个目录化或分类化事物的系统,通常以分级的方式进行。最著名的分类法是
Linnean Taxonomy ,用来对所有活的的事物分类。
在WordPress中,分类法用来对你的数据进行分类并且把他们分组到数据集或子集中。
WordPress有3种内置的
分类法:
- 目录(category)
- 标签(tag)
- 链接目录(link category)
目录和标签有点像文章和页面,他们是相同的类型的内容(分类法),但是默认的行为却不相同,在这方面,目录是分层的然后标签不是。
链接目录(link category)与标签的工作方式相似,理论上可以应用到各种对象类型,但是默认情况下它不会显示在文章编辑区,如果链接是可用的话会显示在编辑区。
你也可以添加任意多你想使用的自定义的其他分类。它们与目录和标签的工作方式相似。你的每一个分类都有与内置分类相同的状态。这跟post和自定custom post type 的比较相似。
分类项
每一个分类法都有使用的分类项来对你的数据排序。一个目录只是目录分类的一个分类项,一个标签是标签分类的一个分类项。当你创建分类时,你将会通过WordPress仪表盘或者使用
wp_insert_term() 函数为你的分类创建分类项。
分类项当与自定义的查询结合时非常有用:你可以在你的主题或插件中创建自定义的样例文件来显示带有多种分类项的文章,以分类项排序,通过分类法确认分类项等等。
WordPress如何存储分类项和分类法
如我在数据之间的关系教程中描述的,WordPress使用多对多的关系,这些关系通过使用3个表来创建:
wp_term_relationships
wp_term_taxonomy
wp_terms
如下图所示,这些表一起链接到`wp_posts`和`wp_links`:
我们来看一下每一个表以及他们怎么工作的。
wp_terms表
wp_terms
表存储目录,标签,链接目录和自定义分类的所有单个分类项。有4个字段:
term_id
是分类项的唯一ID
name
slug
term_group
这个字段暂时在WordPress中没有使用,所以你可以忽略它。
wp_term_taxonomy表
wp_term_taxonomy
表存储更多关于分类项的数据以及他们属于的分类,它有6个字段:
term_taxonomy_id
存储表中该记录的ID
term_id
代表分类项的ID,链接到wp_terms表的该条记录
taxonomy
是这个分类项所属的分类的名称
description
parent
表示该分类项的父分类项,如果该分类是分层的而且它有父分类项
count
是该分类项下文章的数目
在很多WordPress安装中,在`wp_term_taxonomy`表中会有一条为`wp_terms`表中每个分类项的记录,但是在一些情况下会有为每个分类项超过一条的记录。这种情况会在你两个不同的分类中创建两个拥有相同名称和slug的时候发生,这意味着你可以创建一个查询来输出多个分类下的一个分类项。
这意味着这两个表的关系是一对多:一个`wp_terms`的记录可能链接到`wp_term_taxonomy`表中的多条记录,但是`wp_term_taxonomy`表中每条记录只会链接到`wp_terms`表中的一条记录。
wp_term_relationships表
wp_term_relationships
表在创建对象和分类项多对多的关系中是至关重要的。它只有3个字段:
object_id
链接到wp_posts
表的 post_id
字段或 wp_links
表的link_id
字段。
term_taxonomy_id
链接到wp_term_taxonomy
表的相同字段
term_order
是分类项添加到对象的顺序。只有当你 注册分类法 – 明确排序参数为true时使用到-默认是false所以默认值是0。
因为每一个对象可能关联到`wp_term_relation`表中的多条记录,而且每个分类项也可以,这就形成了多对多关系。
总结
对象(即文章,链接)和分类项之间的关系是非常有用的,部分原因因为这是时Worpress中唯一的多对多关系。
理解这些关系如何工作以及关键数据存储的位置将会帮助你理解分类法和分类项如何工作以及如何使用
相关的函数 。