最近有机会接触了一下wordPress,在修改某些数据源和数据库结构的时候着实遇到了不少困难,写下来给大家分享下。
先说一下,我用的是2.5版本。不过个人觉得数据结构分析其实差不多。
数据表结构:
wp_commentmeta
- :存储评论的元数据
wp_comments
- :存储评论
wp_links
- :存储友情链接(Blogroll)
wp_options
- :存储WordPress系统选项和插件、主题配置
wp_postmeta
- :存储文章(包括页面、上传文件、修订)的元数据
wp_posts
- :存储文章(包括页面、上传文件、修订)
wp_terms
- :存储每个目录、标签
wp_term_relationships
- :存储每个文章、链接和对应分类的关系
wp_term_taxonomy
- :存储每个目录、标签所对应的分类
wp_usermeta
- :存储用户的元数据
wp_users
- :存储用户
数据表总体结构图:
按照功能大致分为五类。
- user: 用户信息,包括wp_users表和wp_usermeta表。
- link:链接信息,包括wp_links表。
- post: 文章及评论信息,包括wp_posts、wp_postmeta、wp_comments。
- category,link_category,tag:这个是比较复杂的信息模块,它包含了对分类,链接分类,标签的管理,包括wp_term,wp_term_relationships和wp_term_taxonomy表。
- option: 全局设置信息,包括wp_options表。
wp_posts
作为一个博客系统,最核心的当然是博主发表的一些“文章”了,这些“文章”存放的地方就是这个 wp_posts 表了。注意,这里所说的“文章”是加引号的,因为这个表里存放的除了普通的文章之外,还有附件和页面(page)的一些信息。表里面的 post_type 这个字段就是用来标示类型的。还有一点需要注意的就是,这个表里一些字段是针对于 post_type 的特定类型的,比如 menu_order 这个字段是“页面(page)”特有的,用来指定“页面”的顺序。post_mime_type 是针对附件的,来指定附件的类型。
wp_postmeta
每篇文章的属性是不可能仅仅用 wp_posts 表里的那几个字段来完全标示的,往往还有一些因人而异的属性:写这篇文章时候的心情,地点等等。这些属性的名称和值类型都是不确定的,因 此,Wordpress 采用了元信息(meta)来表示它们。这个表很简单,只有 meta_id, post_id, meta_key, meta_value 这四个字段。post_id 是相关 post 的 id。我们注意到 meta_value 是 longtext 类型的,这里仅是用来存储值,至于值的确切类型,需要程序员来关心。
在撰写文章的时候,我们可以发现编辑框下面有一个 Custom Fields 的选项,我们可以在这里添加 post 的 meta 信息。
wp_comments
用户评论。除了评论的内容以外,还记录了评论用户的名字,邮箱,网址,浏览器类型等信息。比较重要的两个字段是 comment_post_ID 和 comment_approved,前一个用来指示这条评论隶属于哪一篇文章,后一个用来记录审核状况。还有一个比较有意思的是这个 commnet_agent 字段,我们可以利用这个字段来统计一下用户浏览器类型。
wp_users用户帐号表。存储用户名、密码还有一些用户的基本信息。
wp_usermeta
类似上面的 wp_postmeta,存储一些因人而异的用户信息。(比如QQ?ICQ?)
wp_options
用来记录 Wordpress 的一些设置和选项。里面有一个 blog_id 字段,这个应该是用在 MU 版里面来标示不同的 Blog 的。
wp_links
用来存储 Blogroll 里面的链接。
wp_terms
wp_term_relationships
wp_term_taxonomy
这三个表是这里面关系最复杂的了,在 Wordpress 2.2 及以前的版本中是没有这三个表的,代之的是 wp_categories、wp_post2cat 和 wp_link2cat 这三个表。对比这两个版本我们可以发现:在 2.2 版和之前的版本,post 和 link 和 category 的关系都是通过各自单独的表来记录的。而在 2.3 版中加入了 tag 的支持,Wordpress 把 post、link、tag 的分类都抽象成了统一的形式,用新的三个表来记录这些信息。
wp_terms
记录分类,链接分类,标签的一些简要信息,包括名称,缩写。
wp_term_taxonomy
是对wp_terms中的信息的关系信息补充,有所属类型(category,link_category,tag),详细描述,父类,所拥有文章(链接)数量。
wp_term_relationships
关系表,多对多的,object_id是与不同的对象关联,例如wp_posts中的ID(wp_links中的link_id)等,term_taxonomy_id就是关联wp_term_taxonomy中的term_taxonomy_id。
还有一些字段我还不太清楚是有什么用的,例如:
wp_term_relationships中的term_order;
wp_terms中的term_group,wp_option中的一些值作用等等,在以后学习的过程中再作详细的讲解吧,如果大家知道的,也可以告诉我。
比较难以理解的是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
记录了每个文章(或链接)所对应的分类方法。
庆幸的是,关于term的使用,WordPress中相关函数的使用方法还是比较清晰明了,我们就没必要纠结于它的构造了。