一、WordPress数据表介绍
1. wp_commentmeta:仅存储Akismet或手工审核的评论是否为垃圾评论的判断结果;
2. wp_comments:存储评论信息,如评论内容、评论所属文章、评论人昵称、邮箱、URL等;
3. wp_links:存储友情链接信息,如友链名称、URL、打开方式、描述、是否可见等;
4. wp_options:存储在WordPress系统默认及后台中用户设置的系统选项、插件及主题配置信息,如用户设置的博客名博客描述是什么、用的什么主题、主题里用了什么功能、是否开放注册、是否用了固定链接及其形式是什么等等;
5. wp_postmeta:存储文章的一些相关信息,如文章缩略图地址、缩略图长宽高和alt信息、文章所在分类的URL、文章自定义的Description和Keywords、文章访问次数等;
6. wp_posts:存储文章信息,如文章标题、正文、摘要、作者、发布时间、访问密码、评论数、修改时间、文章地址(非静态化之前的,带?和数字ID)等;
7. wp_terms:存储菜单分类、标签分类名称及URL信息;
8. wp_term_relationships:存储文章和分类、标签的相互对应关系;
9. wp_term_taxonomy:存储分类和标签的描述信息、父子关系、所属包含的文章数等;
10. wp_usermeta:存储用户的姓名、昵称、权限等信息;
11. wp_users:存储用户名、密码、昵称、邮箱、注册时间等信息;
二、WordPress数据表字段介绍
需要注意的是WordPress不同版本间数据表字段可能不同
wp_commentmeta
- meta_id:自增唯一ID
- comment_id:对应评论ID
- meta_key:键名
- meta_value:键值
wp_comments
- comment_ID:自增唯一ID
- comment_post_ID:对应文章ID
- comment_author:评论者
- comment_author_email:评论者邮箱
- comment_author_url:评论者网址
- comment_author_IP:评论者IP
- comment_date:评论时间
- comment_date_gmt:评论时间(GMT+0时间)
- comment_content:评论正文
- comment_karma:未知
- comment_approved:评论是否被批准
- comment_agent:评论者的USER AGENT
- comment_type:评论类型(pingback/普通)
- comment_parent:父评论ID
- user_id:评论者用户ID(不一定存在)
wp_links
- link_id:自增唯一ID
- link_url:链接URL
- link_name:链接标题
- link_image:链接图片
- link_target:链接打开方式
- link_description:链接描述
- link_visible:是否可见(Y/N)
- link_owner:添加者用户ID
- link_rating:评分等级
- link_updated:未知
- link_rel:XFN关系
- link_notes:XFN注释
- link_rss:链接RSS地址
wp_options
- option_id:自增唯一ID
- blog_id:博客ID,用于多用户博客,默认0
- option_name:键名
- option_value:键值
- autoload:在WordPress载入时自动载入(yes/no)
wp_postmeta
- meta_id:自增唯一ID
- post_id:对应文章ID
- meta_key:键名
- meta_value:键值
wp_posts
- ID:自增唯一ID
- post_author:对应作者ID
- post_date:发布时间
- post_date_gmt:发布时间(GMT+0时间)
- post_content:正文
- post_title:标题
- post_excerpt:摘录
- post_status:文章状态(publish/auto-draft/inherit等)
- comment_status:评论状态(open/closed)
- ping_status:PING状态(open/closed)
- post_password:文章密码
- post_name:文章缩略名
- to_ping:未知
- pinged:已经PING过的链接
- post_modified:修改时间
- post_modified_gmt:修改时间(GMT+0时间)
- post_content_filtered:未知
- post_parent:父文章,主要用于PAGE
- guid:未知
- menu_order:排序ID
- post_type:文章类型(post/page等)
- post_mime_type:MIME类型
- comment_count:评论总数
wp_terms
- term_id:分类ID
- name:分类名
- slug:缩略名
- term_group:未知
wp_term_relationships
- object_id:对应文章ID/链接ID
- term_taxonomy_id:对应分类方法ID
- term_order:排序
wp_term_taxonomy
- term_taxonomy_id:分类方法ID
- term_id:
- taxonomy:分类方法(category/post_tag)
- description:未知
- parent:所属父分类方法ID
- count:文章数统计
wp_usermeta
- umeta_id:自增唯一ID
- user_id:对应用户ID
- meta_key:键名
- meta_value:键值
wp_users
- ID:自增唯一ID
- user_login:登录名
- user_pass:密码
- user_nicename:昵称
- user_email:Email
- user_url:网址
- user_registered:注册时间
- user_activation_key:激活码
- user_status:用户状态
- display_name:显示名称
三、WordPress数据关系分析

WordPress 数据关系
一对一关系
一对一是所有关系中最简单的——你可以简单地认为就是一条记录只对应另外一个。数据通常都保存在一张表中(尽管不全是这样的,我们将会在该教程的后面看到)。
WordPress中一对一关系的例子如下:
- 文章ID和文章内容
- 文章标题和文章内容
- 文章ID和文章别名(slug)
- 评论ID和评论内容
- 用户ID和用户名
还可以列举出更多的例子,但主要想说明的是任何两条由不同的子段构成记录在一张表的一里行存储就是一对一的关系。
虽然,一对一关系是最无趣的一种数据库关系。但是,如果没有疑问的话让我们继续了解在WordPress使用广泛的——一对多关系。
一对多关系
一对多关系是在数据库中最常见的,这也使得它比“扁平的”表更强大,例如电子表格。当一条记录和不止一个记录有关系时就会用到。
在WordPress中,大多数一对多关系都是用来连接两个表的,并且通过一个唯一标示来连接。例如:post_id就是每篇文章在表wp_posts中的唯一标示,同时也是表wp_comments中每个评论的唯一标示。这意味着每个post_id在表wp_posts中只出现一次,而在表wp_comments中可能出现多次或在根本没有。
WordPress中的其他例子如下:
- 文章和文章元数据
- 文章和用户
- 用户和用户元数据
- 分类法和分类项目
同样地,还能继续列举。在 WordPress 中这是一个重要的话题,让我们继续了解一对多关系的细节吧。
涉及到文章的一对多关系
连接其他表最多的表是wp_posts,大多数关系都是一对多关系。
正如在下表中你看到的,wp_posts表连接了四个其他表:
多说一句啊,文章也可以和文章有一对多关系,在附件表单或在父页面时就是这样的。
文章和文章
正如上面解释的,存储在表wp_posts中的数据可以和相同表里的数据有一对多的关系;然而这个关系并不是你想象的和文章的关系,而是文章那个和附件或在页面或者其他页面的。总之,附件和页面也是文章类型。
附件保存在表wp_posts中,并使用post_parent子段来关联对应的文章ID(抱歉重复)。这就是一对多关系,因为一个附件只能有一个父,而每篇文章可能有多个附件。就算你通过多媒体管理器把附件添加到别的文章中,它的父也是原始添加的文章。
当一个页面是另外一个页面的父时,文章还跟其他的文章有一对多的关系。子页面的记录中,post_parent字段的值就是父页面的post_id字段。这就是一对多的关系,因为父页面可以有很多的子页面但是子页面只能有一个父页面。
就像这样,在考虑文章之间的关系时,考虑WordPress的数据处理时很重要的,文章不是你可能认为的那样被引用。它们包括页面,附件和其他类型的,所有都是保存在wp_posts表中。
文章和文章元数据
文章的元数据保存在它自己的表wp_postmeta中。这个表只有4个字段——post_id,meta_id,还有键值对。一篇文章可以关联很多元数据,但是每个元数据记录只能关联到一篇文章中。
文章和评论
评论也有自己的表wp_comments。每个评论只能关联到一篇文章,但是一篇文章却可以有很多评论。就像所有的其他表关联到wp_posts一样,post_id字段就是用来作关联的(wp_comments中的comment_post_id字段)。
默认情况下wp_comments有15个字段,保存了作者,作者的邮件(email)地址,以及评论自身的内容和它的批准状态。它还关联到了表wp_users,具体内容我们会在下一个章节中介绍到。
评论也有它自己的的元数据,存储在其他表中,我很快会介绍到。
文章和用户
每篇文章通过user_id字段关联到wp_users表,保存在表wp_posts的post_author字段中。这是一对多的关系,因为每篇文章只有一个作者,但是每个用户可以有多篇文章。
文章和用户之间的关系是不同于文章和评论或在元数据的,因为很自然地,一个用户可以有多篇文章,但一篇文章有多个评论或者元数据不同。这就是为什么使用user_id字段而不是post_id来进行关联的原因。
不涉及文章的一对多关系
还有三个一对多的关系,但是和文章没关系。其中的两个是有元数据有关系——评论和它对应的元数据,用户和它对应的元数据。
用户和用户元数据
WordPress把用户附加的元数据信息保存到wp_usermeta表中。这通常用户非标准的用户信息,例如在一个多站点版本中的超级管理员和管理员对用户的颜色设置信息。
用户的大多数数据保存在表wp_users中。这两个表是通过user_id字段和用户拥有多个元数据尽心关联的,每个元数据都会设置到一个用户上。
评论和评论元数据
同样地,有关评论自身的大多数数据都保存在表wp_comments中。但是wp_commentmeta表用来保存附加的元数据的,例如插件Akismet创建的数据。这个关系就像用户和用户元数据的关系一样。
评论和用户
最后的一对多关系是评论和用户的。 表wp_comments包括user_id字段,当一个已经登陆的用户添加一条评论后就会把用户的ID保存进去。记住,这个字段不适用于没有登陆的用户。
多对多关系
数据库中的最后一种类型是多对多关系,也就是说在两边都有连接。在WordPress中只用了一次,在分类系统中(包括分类和标签都是简单的分类方法)。一篇文章可以有很多分类而且一个分类也可以用到多篇文章中。
WordPress创建这个关系和其他数据创建多对多关系一样:通过一个关系表来连接两个表。就是wp_term_relationships表,连接了表wp_posts和wp_term_taxonomy表。
备注:这个表也连接了表 wp_links 和
wp_term_taxonomy,这种连接的方法和连接文章的一样——我很快就会介绍到。
通过查看这两个表最容易解释。表wp_posts包含每篇文章的数据,表wp_term_taxonomy包含每个分类的数据,包括分类和它自身的ID。
为了创建表wp_term_taxonomy和表wp_posts的文章,WordPress在表wp_term_relationships中添加了一条记录,包含post_id和term_id(保存在表wp_term_relationships的object_id字段和term_taxonomy_id字段中)。这意味着表wp_term_relationships能够包含多条文章记录和多条分类记录,也就是多对多的关系。
下图展示了它是如何运行的:
- 文章 1 有分类 1 和 3
- 文章 2 有分类 2
- 文章 3 有分类 4
- 文章 4 有分类 1 和 3
你也可以从另外一个角度来看——例如,分类3关联了文章1和4.
然而,还没有结束。还有第四个表,wp_terms。这里保存了每个分类,命名,和分类描述的数据。每个分类在表wp_terms中只有一条记录,它和表wp_term_txonomy是真正的一对一关系。理论上讲,这个数据没有理由保存在表wp_term_taxonomy中,但不是这样的。
有关链接需要注意的
链接或者友情链接,这个WordPress的特色已经不如以前那么重要了。事实上,从3.5版本链接在后台就已经被默认关闭了;然而,它们还有自己的表wp_links。
它相对于wp_posts表来说是很简单的。毕竟,链接这种内容类型相对文章来说非常简单,它同样和分类有多对多的关系。
总结
正如我们看到的,WordPress有11个表中的10个表都有连接关系。唯一没有提到的表就是wp_options,因为它和其他表都没有关系,它只是简单地保存关于站点而不是内容的数据。我将会在该系列的后续部分介绍它的细节。
通过理解WordPress中的一对一,一对多,和多对多关系,可以帮助你修改数据以及在你的主题或者插件中写自定义的查询语句。
在该系列的下一个部分中,我将会更加详细地介绍内容类型,查找WordPress数据库中保存的内容类型,比较它们之间的相同点和不同点。