之前用了一段时间的Wordpress,觉得真的是一个优秀的博客系统,而且有大量的主题和插件。是我目前用过的最棒的一个博客平台。不仅如此,Wordpress
的代码也是写得非常漂亮,很适合用来学习PHP,真的是很好,看代码看起来很舒服。
打算深入研究一下Wordpress,顺便把我自己的学习经历也写下来,跟大家一起分享,有什么不对的地方,希望各位多多指点。(本人分析的是2.5版本的)
Wordpress对数据库的操作都是通过一个基于现有的数据库类来实现的:
// WordPress DB
Class
// ORIGINAL CODE FROM:
// Justin Vincent (justin@visunet.ie)
// http://php.justinvincent.com
并且同时很多的数据库操作都封装成了函数,直接操作数据库的场合并不多。不过了解它的数据库结构,这样可以对它有个总体上的把握,也有利于源码的分析。
Wordpress官方的数据表介绍的文章,可以去看看:http://codex.wordpress.org/Database_Description
数据表的总体结构如下图(为了节约篇幅,这里仅列出了主键、外键及某些字段):
wordpress仅仅用了 10 个 Table就实现了这么强大的系统,让我钦佩:
wp_comments
wp_links
wp_options
wp_postmeta
wp_posts
wp_term_relationships
wp_term_taxonomy
wp_terms
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中的一些值作用等等,在以后学习的过程中再作详细的讲解吧,如果大家知道的,也可以告诉我。
在其他的文章中我看到有说虚表的,而且我在wpdb这个类中也看到了这样的声明:
// Our tables
var
$posts;
var $users;
var $categories;
var $post2cat;
var
$comments;
var $links;
var $options;
var $postmeta;
var
$usermeta;
var $terms;
var $term_taxonomy;
var
$term_relationships;
var $tables = array('users', 'usermeta', 'posts',
'categories', 'post2cat', 'comments', 'links', 'link2cat',
'options',
'postmeta', 'terms', 'term_taxonomy',
'term_relationships');
不知道上面的'categories',
'post2cat','link2cat'是不是虚表,还是为了兼容以前的版本用的,大家有什么看法的都尽管说说吧。
分享到:
相关推荐
在分析Wordpress的数据库结构时,我们可以看到它主要由10个表格组成,这些表格之间通过外键关联,形成一个完整的数据模型,支持博客系统的核心功能。 1. **用户信息**:这部分由 `wp_users` 和 `wp_usermeta` 表...
1. **模板系统**:WordPress 的模板层次结构允许开发者自定义布局和设计,通过修改模板文件实现个性化定制。 2. **函数与钩子**:了解 WordPress 的函数和钩子机制,开发者可以编写自定义功能,例如通过动作钩子在...
在深入探讨WordPress 3.0的数据库结构之前,我们需要理解WordPress作为一个开源内容管理系统(CMS)的核心功能。WordPress主要用于创建博客和网站,而其背后的数据库存储了所有内容、用户信息、评论、链接以及其他关键...
通过编写迁移文件,开发者可以安全地更改数据库结构,而不会丢失数据。这对于WordPress主题或插件升级尤其有用,确保在更新过程中保持数据完整。 4. **自定义WordPress CLI命令**: 使用Artisan,开发者可以创建...
通常,这样的库会提供接口和工具,使得Django应用能够与WordPress数据库进行交互,实现数据的同步或迁移,或者创建自定义的WordPress功能。 **Django与WordPress的集成** 1. **数据共享**:Django和WordPress虽然...
本篇文章将深入探讨“wordpress-plugin-源码.rar”这个压缩包中的内容,旨在帮助读者理解WordPress插件的源码结构、工作原理,并提供插件开发的基本指引。 一、WordPress插件基础 1. 插件定义:WordPress插件是为...
它可能包括了WordPress的主题定制、插件开发、数据库交互、前端页面设计等多个方面,为学生提供了实际操作和了解Web开发流程的机会。 【标签】"毕业设计"表明这是一个学术性质的项目,通常这类项目旨在检验学生在...
在`wordpress-grep`中,Perl的这些特性被充分利用,以方便开发者对WordPress数据库进行深度分析。 **二、WordPress-Grep工作原理** 1. **连接数据库**:`wordpress-grep`首先需要连接到WordPress的MySQL数据库,这...
Android的SQLite数据库系统是轻量级的,适合在本地存储少量结构化数据。开发者可以学习如何创建表、执行SQL查询以及在Android应用中操作数据库。 另外,项目的源码还会包含一些关于权限管理、多线程(如使用Android...
WordPress 框架结构分析 WordPress 是一个广泛使用的开源内容管理系统(CMS),以其易用性和灵活性而闻名。本文将深入探讨WordPress 3.0.1版本的框架结构,帮助开发者理解其内部工作原理,以便更好地进行网站开发和...
在深入理解WordPress的工作原理时,了解其数据库结构是至关重要的。本文将详细解析WordPress数据库中的主要表及其字段,帮助你更好地掌握WordPress的数据管理。 首先,我们来看`wp_categories`表,这是存储网站分类...
### WordPress库结构分析 #### 一、WordPress库结构综述 WordPress是一款非常流行的开源内容管理系统(CMS),被广泛应用于各种规模的网站构建之中。它的强大之处不仅在于丰富的插件和主题支持,还在于其灵活而高效...
- WordPress的核心文件结构。 - 主要函数和钩子(hooks)的使用方法。 - 模板文件的组织方式。 - **实践技能**: - 学习如何阅读和理解WordPress核心文件。 - 能够利用WordPress提供的函数进行基本的编程任务...
`WordPress代码和分析-从主题开始.htm` 强调了主题在WordPress中的重要性。主题不仅定义了网站的视觉样式,还控制着页面布局和内容显示。开发者可以通过创建自定义主题或者修改已有的免费或付费主题来定制网站。...
【文件结构与源码分析】 从提供的压缩包文件名"wordpress-locomotive-master"来看,这很可能是Locomotive插件的源码仓库。"master"分支通常是Git版本控制系统中的默认分支,代表了项目的主线开发。在这个文件夹中,...
"WordPress-Android-master"作为WordPress官方Android客户端的源码仓库,遵循了典型的Android项目组织结构。它包括了`app`模块,用于构建应用程序的核心功能;`library`模块,包含了可重用的组件和库;以及`test`...
- 数据库表结构设计:定义数据模型,包括实体、属性和关系,这直接影响到数据的组织和访问效率。 - 数据库建立:创建数据库,设置存储引擎、字符集、权限等,以满足项目需求。 - 数据库表操作:编写SQL语句进行数据...
3. **数据库交互**:插件可能使用了WordPress的内置数据库接口(如`$wpdb`)来存储和检索用户信息,例如,记录用户的密码提醒设置。 4. **用户接口**:WordPress的后端界面(admin area)是插件与用户交互的重要...
- 每次WordPress发布新版本时,都可能包含对数据库结构的更改。因此,在升级WordPress版本时,系统会提示用户进行数据库升级。 - 如果更新过程未完全执行完毕(例如,因为权限问题导致某些文件未能被正确更新),...