黄聪:wordpress源码解析-数据库表结构(转)
如果是一个普通的用户,不需要了解wordpress数据库的结构。但是,如果你正在写一个插件,你应该会对wordpress如何处理它的数据和关系感兴趣。如果你已经尝试使用已经存在的wordpress api 去访问你需要的数据,但不直接访问数据库的情况下,这是不可能的,WordPress的提供WPDB的类,使这项任务变得简单。
WordPress数据库的11个数据表分别是:
|
表名(点击表名查看详细介绍) |
描述 |
| wp_commentmeta | 文章评论额外信息表 |
| wp_comments | 文章评论信息表 |
| wp_links | 链接信息表 |
| wp_options | 基本配置信息表,通常通过get_option来操作,该表通常作为插件存储数据的一个地方。 |
| wp_postmeta | 文章额外数据表,例如文章浏览次数,文章的自定义字段等都存储在这里。 |
| wp_posts | 文章信息表,包括了日志、附件、页面等等信息。是WordPress最重要的一个数据表。 |
| wp_terms | 文章分类、链接分类、标签的信息表。 |
| wp_term_relationships | 分类与文章信息表(wp_posts)、链接表(wp_links)的关联表。 |
| wp_term_taxonomy | 分类信息表,区分wp_terms信息的分类类型,有category、link_category和tag三种分类类型。 |
| wp_usermeta | 用户额外信息表 |
| wp_users | 用户基本信息表。存放系统所有用户基本信息。 |
WordPress数据库表之间的关系是什么呢?
要搞明白这个问题以及对WordPress数据表之间的关系有更加深刻的理解,让我们先来想想WordPress博客系统的功能,默认安装的WordPress2.6.2版本博客系统涉及的数据信息主要包括了用户信息、分类信息、链接信息、文章信息、文章评论信息、基本配置信息这6类信息。
用户信息:系统中所有注册用户的帐号信息。
分类信息:包括了文章分类、链接分类、标签这3中分类信息。
链接信息:就是博客系统中的友情链接信息。
文章信息:博客系统中的日志、日志产生的附件、页面等信息。
文章评论信息:对具体日志或者附件的评论信息。
基本配置信息:系统中的基本配置信息,例如博客名称,博客地址等等。
WordPress数据库的11个数据表就是为了存储以上6类数据信息而设计,这些表之间的总体关系结构如下图所示:

从上图可以看出WordPress博客系统6类数据信息分别所涉及的数据表及关系如下表所示:
| 信息类型 | 涉及数据表及关联关系 |
| 用户信息 | 数据表:wp_users、wp_usermeta,关联关系:wp_users.ID->wp_usermeta.user_id |
| 分类信息 | 数据表:wp_terms、wp_term_taxonomy关联关系:wp_terms.term_id->wp_term_taxonomy.term_id |
| 链接信息 |
数据表:wp_links、wp_term_relationships、wp_terms、wp_term_taxonomy、 wp_users、wp_usermeta关联关系: 一,确定链接所属分类 (1)wp_links.link_id->wp_term_relationships.object_id, (2)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id 二、确定链接所有者 (4)wp_links.link_owner->wp_users.ID(5)wp_users.ID->wp_usermeta.user_id |
| 文章信息 |
数据表:wp_posts、wp_postmeta、wp_comments、wp_term_relationships、wp_terms、 wp_term_taxonomy、wp_users、wp_usermeta关联关系:一、确定文章信息 (1)wp_posts.ID->wp_postsmeta.post_id 二、确定文章评论 (2)wp_posts.ID->wp_comments.comment_post_id 三、确定文章评论的作者 (3)wp_comments.comment_author->wp_users.ID (4)wp_users.ID->wp_usermeta.user_id 四、确定文章所属分类 (5)wp_posts.ID->wp_term_relationships.object_id, (6)wp_term_relationships.term_taxonomy_id->wp_term_taxonomy.term_taxonomy_id (7)wp_terms->term_id->wp_term_taxonomy 五、确定文章作者 (8)wp_posts.author->wp_users.ID; (9)wp_users.ID->wp_usermeta.user_id |
| 文章评论信息 | 数据表:wp_comments、wp_posts、wp_users、wp_usermeta关联关系: 一、确定评论的文章 (1)wp_comments.comment_post_id->wp_posts.ID 二、确定评论的作者 (2)wp_comments.comment_author->wp_users.ID(3)wp_users.ID->wp_usermeta.user_id |
| 基本配置信息 | 数据表:wp_options没有关联关系 |
Wp-config.php中关于数据库的设置。
<?php
/*wp-config.php */ // ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress 数据库的名称 */
define('DB_NAME', SAE_MYSQL_DB); /** MySQL 数据库用户名 */
define('DB_USER', SAE_MYSQL_USER); /** MySQL 数据库密码 */
define('DB_PASSWORD', SAE_MYSQL_PASS); /** MySQL 主机 */
define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT); /** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8'); /** 数据库整理类型。如不确定请勿更改 */
define('DB_COLLATE', ''); define('WP_USE_MULTIPLE_DB', true); $db_list = array(
'write'=> array(
array(
'db_host' => SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT,
'db_user'=> SAE_MYSQL_USER,
'db_password'=> SAE_MYSQL_PASS,
'db_name'=> SAE_MYSQL_DB,
'db_charset'=> 'utf8'
)
),
'read'=> array(
array(
'db_host' => SAE_MYSQL_HOST_S.':'.SAE_MYSQL_PORT,
'db_user'=> SAE_MYSQL_USER,
'db_password'=> SAE_MYSQL_PASS,
'db_name'=> SAE_MYSQL_DB,
'db_charset'=> 'utf8'
)
),
);
$global_db_list = $db_list['write']; /**#@+
* 身份密匙设定。
*
* 您可以随意写一些字符
* 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私钥生成服务},
* 任何修改都会导致 cookie 失效,所有用户必须重新登录。
*
* @since 2.6.0
*/
define('AUTH_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_KEY', SAE_SECRETKEY ));
define('SECURE_AUTH_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_KEY', SAE_SECRETKEY ));
define('LOGGED_IN_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_KEY', SAE_SECRETKEY ));
define('NONCE_KEY', hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_KEY', SAE_SECRETKEY ));
define('AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'AUTH_SALT', SAE_SECRETKEY ));
define('SECURE_AUTH_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'SECURE_AUTH_SALT', SAE_SECRETKEY ));
define('LOGGED_IN_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'LOGGED_IN_SALT', SAE_SECRETKEY ));
define('NONCE_SALT', hash_hmac('sha1', SAE_ACCESSKEY . 'NONCE_SALT', SAE_SECRETKEY )); /**#@-*/ /**
* WordPress 数据表前缀。
*
* 如果您有在同一数据库内安装多个 WordPress 的需求,请为每个 WordPress 设置不同的数据表前缀。
* 前缀名只能为数字、字母加下划线。
*/
$table_prefix = 'wp_'; /**
* WordPress 语言设置,默认为英语。
*
* 本项设定能够让 WordPress 显示您需要的语言。
* wp-content/languages 内应放置同名的 .mo 语言文件。
* 要使用 WordPress 简体中文界面,只需填入 zh_CN。
*/
define ('WPLANG', 'zh_CN'); /**
* 开发者专用:WordPress 调试模式。
*
* 将这个值改为“true”,WordPress 将显示所有开发过程中的提示。
* 强烈建议插件开发者在开发环境中启用本功能。
*/
define('WP_DEBUG', false); /* 好了!请不要再继续编辑。请保存该文件。 */ /** WordPress 目录的绝对路径。 */
if ( !defined('ABSPATH') )
define('ABSPATH', dirname(__FILE__) . '/'); /** 设置 WordPress 变量和包含文件。 这个文件内容很多啊,分析较困难*/
require_once(ABSPATH . 'wp-settings.php');
wp-db.php 包含一个wpdb的类,是数据库操作API 。产生一个$wpdb的全局变量,是wpdb类的一个对象。挺长的,贴在文章里太臃肿了。
参考:
http://wenku.baidu.com/view/6448da5bbe23482fb4da4c94.html?from_page=view&from_mod=download
http://codex.wordpress.org/Database_Description
http://codex.wordpress.org/Function_Reference/wpdb_Class
原文:http://blog.csdn.net/liujiyong7/article/details/8042132
黄聪:wordpress源码解析-数据库表结构(转)的更多相关文章
- IdentityServer4源码解析_1_项目结构
目录 IdentityServer4源码解析_1_项目结构 IdentityServer4源码解析_2_元数据接口 IdentityServer4源码解析_3_认证接口 IdentityServer4 ...
- 黄聪:wordpress源码解析-目录结构-文件调用关系(转)
Wordpress是一个单入口的文件,所有的前端处理都必须经过index.php,这是通过修改web服务器的rewrite规则来实现的.这种做法的好处是显而易见的,这样URL更好看,不必为每一个url ...
- wordpress源码解析-目录结构-文件调用关系(1)
学习开源代码,是一种很快的提升自己的学习方法.Wordpress作为一个开源的博客系统,非常优秀,应用广泛,使用起来简单方便,具有丰富的主题和插件,可以按照自己的需求来任意的进行修改.所以就从word ...
- 黄聪:sqlserver 2008修改数据库表的时候错误提示“阻止保存要求重新创建表的更改”
当用户在在SQL Server 2008企业管理器中更改表结构时,必须要先删除原来的表, 然后重新创建新表,才能完成表的更改,如果强行更改会出现以下提示:不允许保存更改 .您所做的更改要求删除并重新创 ...
- axios 源码解析(中) 代码结构
axios现在最新的版本的是v0.19.0,本节我们来分析一下它的实现源码,首先通过 gitHub地址获取到它的源代码,地址:https://github.com/axios/axios/tree/v ...
- identityserver4源码解析_3_认证接口
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4 ...
- IdentityServer4源码解析_5_查询用户信息接口
协议简析 UserInfo接口是OAuth2.0中规定的需要认证访问的接口,可以返回认证用户的声明信息.请求UserInfo接口需要使用通行令牌.响应报文通常是json数据格式,包含了一组claim键 ...
- identityserver4源码解析_2_元数据接口
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4 ...
- IdentityServer4源码解析_4_令牌发放接口
目录 identityserver4源码解析_1_项目结构 identityserver4源码解析_2_元数据接口 identityserver4源码解析_3_认证接口 identityserver4 ...
随机推荐
- 第六课,T语言表达式(版本5.0)
TC综合开发工具里的表达式大体分为:计算表达式.条件表达式 计算表达式: 它一般是用在赋值过程中,或者是和条件表达式混合使用这样的表达式里只有数字运算符(如:+.-.+=.*=等等运算符),没有关系运 ...
- 2016 Sichuan Province Programming Contest
2016 Sichuan Province Programming Contest 代码 2016 Sichuan Province Programming Contest A. Nearest Ne ...
- HDU 2096 小明A+B --- 水题
HDU 2096 /* HDU 2096 小明A+B --- 水题 */ #include <cstdio> int main() { #ifdef _LOCAL freopen(&quo ...
- android的消息处理有三个核心类:Looper,Handler和Message。
android的消息处理机制(图+源码分析)——Looper,Handler,Message 作为 一名android程序员,我学习android的一大乐趣是可以通过源码学习google大牛们的设 ...
- 【BZOJ2013】【JSOI2008】球形空间产生器
看chty代码 原题: BZOJ挂了--等好了补上题面 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这 ...
- strlen() 函数
strlen() 函数通常用来计算字符串的长度,但是今天突然发现个奇怪的现象. 如下所示: #include <stdio.h> #include <stdlib.h> #in ...
- MySQL-python模块
1. Python 操作 Mysql 模块的安装 linux: pip install MySQL-python 或 yum -y install MySQL-python windows: exe ...
- RandomAccessFile
RandomAccessFile是用来访问那些保存数据记录的文件的,你就可以用seek( )方法来访问记录,并进行读写了.这些记录的大小不必相同:但是其大小和位置必须是可知的.但是该类仅限于操作文件
- Android 初阶自定义 View 字符头像
自己很少做自定义 View ,只有最开始的时候跟着郭神写了一个小 Demo ,后来随着见识的越来越多,特别是在开源社区看到很多优秀的漂亮的控件,都是羡慕的要死,但是拉下来的代码还是看不明白,而且当时因 ...
- mysql中的semi-join
1. 背景介绍 什么是semi-join? 所谓的semi-join是指semi-join子查询. 当一张表在另一张表找到匹配的记录之后,半连接(semi-jion)返回第一张表中的记录.与条件连接相 ...