WordPress数据库及各表结构功能详解

前言

WordPress使用MySQL数据库。数据表结构与常规有些差异,数据内容有常规的以数据表方式记录,也有以数据元方式记录,数据元方式在直接查看时不太直观。

想成为一个开发者,我们必须掌握WordPress数据库的基本结构,并在自己的插件或主题中使用他们,写入或读出数据。

一、数据表

WordPress一共有以下12个表。这里加上了默认的表前缀 wp_

  1. ◉ wp_commentmeta:存储评论的元数据
  2. ◉ wp_comments:存储评论
  3. ◉ wp_links:存储友情链接
  4. ◉ wp_options:存储WordPress系统选项和插件、主题配置
  5. ◉ wp_postmeta:存储文章(包括页面、上传文件、修订)的元数据
  6. ◉ wp_posts:存储文章(包括页面、上传文件、修订)
  7. ◉ wp_terms:存储每个目录、标签
  8. ◉ wp_termmeta:存储每个目录、标签的ID,key,value
  9. ◉ wp_term_relationships:存储每个文章、链接和对应分类的关系
  10. ◉ wp_term_taxonomy:存储每个目录、标签所对应的分类
  11. ◉ wp_usermeta:存储用户的元数据
  12. ◉ wp_users:存储用户

二、数据表结构

下面我们再详细了解各个表中的子项

wp_categories:

用于保存分类相关信息的表。包括了5个字段,分别是:
◈ cat_ID – 每个分类唯一的ID号,为一个bigint(20)值,且带有附加属性auto_increment。
◈ cat_name – 某个分类的名称,为一个varchar(55)值。
◈ category_nicename – 指定给分类的一个便于记住的名字,也就是所谓的slug,这是一个varchar(200)值。
◈ category_description – 某个分类的详细说明,longtext型值。
◈ category_parent – 分类的上级分类,为一个int(4)值,对应是的当前表中的cat_ID,即wp_categories.cat_ID。无上级分类时,这个值为0。

wp_comments:

用于保存评论信息的表。包括了15个字段,分别为:
◊ comment_ID – 每个评论的唯一ID号,是一个bigint(20)值。带有附加属性auto_increment。
◊ comment_post_ID – 每个评论对应的文章的ID号,int(11)值,等同于wp_posts.ID。
◊ comment_author – 每个评论的评论者名称,tinytext值。
◊ comment_author_email – 每个评论的评论者电邮地址,varchar(100)值。
◊ comment_author_url – 每个评论的评论者网址,varchar(200)值。
◊ comment_author_IP – 每个评论的评论者的IP地址,varchar(100)值。
◊ comment_date – 每个评论发表的时间,datetime值(是加上时区偏移量后的值)。
◊ comment_date_gmt – 每个评论发表的时间,datetime值(是标准的格林尼治时间)。
◊ comment_content – 每个评论的具体内容,text值。
◊ comment_karma – 不详,int(11)值,默认为0。
◊ comment_approved – 每个评论的当前状态,为一个枚举值enum(’0′,’1′,’spam’),0为等待审核,1为允许发布,spam为垃圾评论。默认值为1。
◊ comment_agent – 每个评论的评论者的客户端信息,varchar(255)值,主要包括其浏览器和操作系统的类型、版本等资料。
◊ comment_type – 不详,varchar(20)值。
◊ comment_parent – 某一评论的上级评论,int(11)值,对应wp_comment.ID,默认为0,即无上级评论。
◊ user_id – 某一评论对应的用户ID,只有当用户注册后才会生成,int(11)值,对应wp_users.ID。未注册的用户,即外部评论者,这个ID的值为0。

wp_linkcategories:

用于保存在WP后台中添加的链接的相关信息的表。包括13个字段:
◈ cat_id – 每个链接分类的唯一ID,bigint(20)值,为一个自增量auto_increment。
◈ cat_name – 每个链接分类的名字,tinytext值。
◈ auto_toggle -这个字段所包含的是一个比较特别的属性。如果为Y,则当该分类中加入了新链接时,其它的链接会变为不可见。它是一个枚举型的值enum(’Y’,’N’),默认为N。
◈ show_images – 该字段也是枚举值enum(’Y’,’N’),默认为Y。用户指定是否允许在该链接分类显示图片链接。
◈ show_description – 该字段指定相应的链接分类下的链接,是否再专门[换行]显示它们的说明,这是一个枚举型值enum(’Y’,’N’),默认为N,即不显示说明(但会通过title属性中显示说明)。
◈ show_rating – 显示该分类下链接的等级。它也是一个枚举值enum(’Y’,’N’),默认为Y。此时,你可以用链接等级的方式来对该链接分类下的链接进行排序。
◈ show_updated – 指定该链接分类有更新是,是否进行显示,枚举值enum(’Y’,’N’),默认为Y。
◈ sort_order – 指定该链接分类中链接的排序依据,varchar(64)值。一般用链接的名字(name,即wp_links.link_name)或ID(id,即wp_links.link_id)。
◈ sort_desc – 指定链接分类的排序方式,枚举值enum(’Y’,’N’),默认为N,即用降序。
◈ text_before_link – 该链接分类下每个链接的前置html文本,varchar(128)值,默认是’列表开始标签’。
◈ text_after_link – 该链接分类下每个链接的中,链接与说明文字(wp_links.link_description)之间的html文本,varchar(128)值,默认是’换行标签’。
◈ text_after_all – 该链接分类下每个链接的后置html文本,varchar(128)值,默认是’列表结束标签’。
◈ list_limit – 用于规定某一链接分类中显示的(可设定的?)链接的个数,int(11)值,默认为-1,即对链接分类下链接的个数无限制。

wp_links :

用于保存用户输入到Wordpress中的链接(通过Link Manager)的表。共14个字段:
◊ link_id – 每个链接的唯一ID号,bigint(20)值,附加属性为auto_increment。
◊ link_url – 每个链接的URL地址,varchar(255)值,形式为http://开头的地址。
◊ link_name – 单个链接的名字,varchar(255)值。
◊ link_image – 链接可以被定义为使用图片链接,这个字段用于保存该图片的地址,为varchar(255)值。
◊ link_target – 链接打开的方式,有三种,_blank为以新窗口打开,_top为就在本窗口中打开并在最上一级,none为不选择,会在本窗口中打开。这个字段是varchar(25)值。
◊ link_category – 某个链接对应的链接分类,为int(11)值。相当于wp_linkcategories.cat_id。
◊ link_description – 链接的说明文字。用户可以选择显示在链接下方还是显示在title属性中。varchar(255)值。
◊ link_visible – 该链接是否可以,枚举enum(’Y’,’N’)值,默认为Y,即可见。
◊ link_owner – 某个链接的创建人,为一int(11)值,默认是1。(应该对应的就是wp_users.ID)
◊ link_rating – 链接的等级,int(11)值。默认为0。
◊ link_updated – 链接被定义、修改的时间,datetime值。
◊ link_rel – 链接与定义者的关系,由XFN Creator设置,varchar(255)值。
◊ vlink_notes – 链接的详细说明,mediumtext值。
◊ link_rss – 该链接的RSS地址,varchar(255)值。

wp_options:

用于保存Wordpress相关设置、参数的表,共11个字段。最重要是的option_value字段,里面包括了大量的重要信息。
◈ option_id – 选项的ID,bigint(20)值,附加auto_increment属性。
◈ blog_id – 不详。或许用在单在用户的WP版本上并不重要吧,或许是针对不同用户的Blog来设置的一个值。int(11)值,默认为0,即当前blog。
◈ option_name – 选项名称,varchar(64)值。
◈ option_can_override – 该选项是否可被重写、更新,枚举enum(’Y’,’N’)值,默认为Y,即可被重写、更新。
◈ option_type – 选项的类型,作用不详,int(11)值,默认为1。
◈ option_value – 选项的值,longtext值,这个字段的内容比较重要。Wordpress初始化时就会设定好约70个默认的值,这里暂不介绍。
◈ option_width – 选项的宽(?),作用不详。int(11)值,默认为20。
◈ option_height – 选项的高(?),作用不详。int(11)值,默认为8。
◈ option_description – 针对某个选项的说明,tinytext值。
◈ option_admin_level – 设定某个选项可被操纵的用户等级(详情见我的相关文章),int(11)值,默认为1。
◈ autoload – 选项是否每次都被自动加载,枚举enum(’yes’,’no’)值,默认为yes。

wp_postmeta:

用于保存文章的元信息(meta)的表,四个字段:
◊ meta_id – 元信息ID,bigint(20)值,附加属性为auto_increment。
◊ post_id – 文章ID,bigint(20)值,相当于wp_posts.ID。
◊ meta_key – 元信息的关键字,varchar(255)值。
◊ meta_value – 元信息的值,text值。这些内容主要是在文章及页面编辑页(Write Post, Write Page)的”Add a new custom field to this post(page):”下进行设定的。meta_key就对应名为”key”的下拉列表中的项,而值由用户自己填上(某些时候,wp也会自动加入,如文章中有的音频媒体)。

wp_posts:

用于保存你所有的文章(posts)的相关信息的表,非常的重要。一般来讲,它存储的数据是最多的。一共包括了21个字段。
◈ ID – 每篇文章的唯一ID,bigint(20)值,附加属性auto_increment。
◈ post_author – 每篇文章的作者的编号,int(4)值,应该对应的是wp_users.ID。
◈ post_date – 每篇文章发表的时间,datetime值。它是GMT时间加上时区偏移量的结果。
◈ post_date_gmt – 每篇文章发表时的GMT(格林威治)时间,datetime值。
◈ post_content – 每篇文章的具体内容,longtext值。你在后台文章编辑页面中写入的所有内容都放在这里。
◈ post_title – 文章的标题,text值。
◈ post_category – 文章所属分类,int(4)值。
◈ post_excerpt – 文章摘要,text值。
◈ post_status – 文章当前的状态,枚举enum(’publish’,’draft’,’private’,’static’,’object’)值,publish为已发表,draft为草稿,private为私人内容(不会被公开) ,static(不详),object(不详)。默认为publish。
◈ comment_status – 评论设置的状态,也是枚举enum(’open’,’closed’,’registered_only’)值,open为允许评论,closed为不允许评论,registered_only为只有注册用户方可评论。默认为open,即人人都可以评论。
◈ ping_status – ping状态,枚举enum(’open’,’closed’)值,open指打开pingback功能,closed为关闭。默认值是open。
◈ post_password – 文章密码,varchar(20)值。文章编辑才可为文章设定一个密码,凭这个密码才能对文章进行重新强加或修改。
◈ post_name – 文章名,varchar(200)值。这通常是用在生成permalink时,标识某篇文章的一段文本或数字,也即post slug。
◈ to_ping – 强制该文章去ping某个URI。text值。
◈ pinged – 该文章被pingback的历史记录,text值,为一个个的URI。
◈ post_modified – 文章最后修改的时间,datetime值,它是GMT时间加上时区偏移量的结果。
◈ post_modified_gmt – 文章最后修改的GMT时间,datetime值。
◈ post_content_filtered – 不详,text值。
◈ post_parent – 文章的上级文章的ID,int(11)值,对应的是wp_posts.ID。默认为0,即没有上级文章。
◈ guid – 这是每篇文章的一个地址,varchar(255)值。默认是这样的形式:your.blog.site/?p=1,如果你形成permalink功能,则通常会是你的Wordpress站点地址+文章名。
◈ menu_order – 不详,int(11)值,默认为0。
◈ post_type – 文章类型,具体不详,varchar(100)值。默认为0。
◈ post_mime_type – 不详。varchar(100)值。
◈ comment_count – 评论计数,具体用途不详,bigint(20)值。

wp_usermeta :

用于保存用户元信息(meta)的表,共4个字段:
◊ umeta_id – 元信息ID,bigint(20)值,附加属性auto_increment。
◊ user_id – 元信息对应的用户ID,bigint(20)值,相当于wp_users.ID。
◊ meta_key – 元信息关键字,varchar(255)值。
◊ meta_value – 元信息的详细值,longtext值。

wp_users:

用于保存Wordpress使用者的相关信息的表。
◈ ID – 用户唯一ID,bigint(20)值,带附加属性auto_increment。
◈ user_login – 用户的注册名称,varchar(60)值。
◈ user_pass – 用户密码,varchar(64)值,这是经过加密的结果。好象用的是不可逆的MD5算法。
◈ user_nicename – 用户昵称,varchar(50)值。
◈ user_email – 用户电邮地址,varchar(100)值。
◈ user_url – 用户网址,varchar(100)值。
◈ user_registered – 用户注册时间,datetime值。
◈ user_level – 用于等级,int(2)值,可以是0-10之间的数字,不同等级有不同的对WP的操作权限。
◈ user_activation_key – 用户激活码,不详。varchar(60)值。
◈ user_status – 用户状态,int(11)值,默认为0。
◈ display_name – 来前台显示出来的用户名字,varchar(250)值。

后记

在WordPress的数据库结构中,存储系统选项和插件配置的wp_options表是比较独立的结构,在后文中会提到,它采用了key-value模式存储,这样做的好处是易于拓展,各个插件都可以轻松地在这里存储自己的配置。

post,comment,user 则是三个基本表加上拓展表的组合。以wp_users为例,wp_users已经存储了每个用户会用到的基本信息,比如 login_name、display_name、 password、email等常用信息,但如果我们还要存储一些不常用的数据,最好的做法不是去在表后加上一列,去破坏默认的表结构,而是将数据存在wp_usermeta中。wp_usermeta这个拓展表和wp_options表有类似的结构,我们可以在这里存储每个用户的QQ号码、手机号码、登录WordPress后台的主题选项等等。

比较难以理解的是term,即wp_terms、wp_term_relationships、wp_term_taxonomy。在WordPress的系统里,我们常见的分类有文章的分类、链接的分类,实际上还有TAG,它也是一种特殊的分类方式,我们甚至还可以创建自己的分类方法。WordPress将所有的分类及分类方法、对应结构都记录在这三个表中。wp_terms记录了每个分类的名字以及基本信息,如本站分为“WordPress开发”、“WPCEO插件”等,这里的分类指广义上的分类,所以每个TAG也是一个“分类”。wp_term_taxonomy记录了每个分类所归属的分类方法,如“WordPress开发”、“WPCEO插件”是文章分类(category),放置友情链接的“我的朋友”、“我的同事”分类属于友情链接分类(link_category)。wp_term_relationships记录了每个文章(或链接)所对应的分类方法。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
It doesn't matter how slow you are, as long as you're determined to get there, you'll get there.
不管你有多慢,都不要紧,只要你有决心,你最终都会到达想去的地方
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容