WordPress源码解析-数据库表结构

news2024/12/25 0:52:17

WordPress是一个功能强大的内容管理系统,它使用MySQL数据库来存储和管理网站的内容、用户和配置信息。作为WordPress开发者,了解WordPress数据库的结构和各表的作用至关重要,因为这将帮助您更好地开发插件和主题,以及执行高级数据库操作。

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
(该关系还要取决与wp_term_taxonomy表中的taxonomy分类类型为“link_category”) (3)wp_terms.term_id->wp_term_taxonom.term_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
(该关系还要取决与wp_term_taxonomy表中的taxonomy分类类型为“category”或者“tag”)

(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_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:分类或标签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:电子邮件地址
user_url:个人网址
user_registered:注册时间
user_activation_key:激活码
user_status:用户状态
display_name:显示名称

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');


                        
原文链接:https://blog.csdn.net/vbgesab/article/details/139601359

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2264985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目实践】SpringBoot Nacos配置管理 map数据

本文是继续上一篇博客SpringBoot使用Nacos进行application.yml配置管理_nacos application配置-CSDN博客 目录 一、踩坑记录 二、亲测成功 方法一 方法二 一、踩坑记录 参考网上的一些案例,看到网上有人建议 Nacos 可以直接配置成 Map 类型,后台使用…

XILINX平台LINUX下高速ADC08060驱动

前置调研 原理图 AXI-FULL时序 由于项目需要实时性高,采用AXI-FULL接口ADC IP作为master端写入DDR中 引用: AXI_02 AXI4总线简介(协议、时序)_axi4总线时序-CSDN博客 AXI总线的访问 在ARM架构中,访问I/O地址通常通…

【C语言】指针数组、数组指针、函数指针、指针函数、函数指针数组、回调函数

【C语言】函数指针与指针函数 文章目录 [TOC](文章目录) 前言一、指针数组二、数组指针三、函数指针四、指针函数五、函数指针数组六、回调函数七、参考资料总结 前言 使用工具: 1.DEVC 提示:以下是本篇文章正文内容,下面案例可供参考 一、…

华为IPD流程6大阶段370个流程活动详解_第二阶段:计划阶段 — 86个活动

华为IPD流程涵盖了产品从概念到上市的完整过程,各阶段活动明确且相互衔接。在概念启动阶段,产品经理和项目经理分析可行性,PAC评审后成立PDT。概念阶段则包括产品描述、市场定位、投资期望等内容的确定,同时组建PDT核心组并准备项目环境。团队培训涵盖团队建设、流程、业务…

Adversarial Machine Learning(对抗机器学习)

之前把机器学习(Machine Learning)的安全问题简单记录了一下,这里有深入研究了一些具体的概念,这里记录一下方便以后查阅。 Adversarial Machine Learning(对抗机器学习) Adversarial Examples 相关内容Eva…

UE5 猎户座漂浮小岛 12 技能 瞬移 重力控制

1. 瞬移 1.1. 显示鼠标光标 “事件开始运行”添加显示鼠标逻辑 1.2. 释放技能蓝图 设置技能键 编写蓝图 1.3. 瞬移最大距离 2. 重力控制 2.1. 添加输入与动画 映射 重定向得到动画 新增状态FIRE_GracityControl 设置动画姿势 新增变量 切换动画 2.2. 技能蓝图(…

SpiderFlow平台v0.5.0流程的执行过程

流程执行过程: 1. 流程启动 流程的执行通常从一个 开始节点 开始,该节点是整个爬虫任务的起点。开始节点没有实际的功能作用,主要作用是标记流程的起始。 执行顺序:在执行过程中,系统按照流程中的连接线顺序依次执行…

JVM系列(十二) -常用调优命令汇总

最近对 JVM 技术知识进行了重新整理,再次献上 JVM系列文章合集索引,感兴趣的小伙伴可以直接点击如下地址快速阅读。 JVM系列(一) -什么是虚拟机JVM系列(二) -类的加载过程JVM系列(三) -内存布局详解JVM系列(四) -对象的创建过程JVM系列(五) -对象的内存分…

【Java基础面试题033】Java泛型的作用是什么?

Java的基础语法可以看尚硅谷的这个PDF:尚硅谷JavaSE基础/《Java从入门到精通(JDK17版)》_尚硅谷电子书.pdf Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com) 回答重点 Java泛型的作用是通过在编译时检查类型安全,允许程序员编写更通用和…

如何永久解决Apache Struts文件上传漏洞

Apache Struts又双叒叕爆文件上传漏洞了。 自Apache Struts框架发布以来,就存在多个版本的漏洞,其中一些漏洞涉及到文件上传功能。这些漏洞可能允许攻击者通过构造特定的请求来绕过安全限制,从而上传恶意文件。虽然每次官方都发布补丁进行修…

重生之我在异世界学编程之C语言:深入动态内存管理收尾 + 柔性数组篇

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文常见的动态内存管理错误&#xf…

重温设计模式--观察者模式

文章目录 观察者模式(Observer Pattern)概述观察者模式UML图作用:实现对象间的解耦支持一对多的依赖关系易于维护和扩展 观察者模式的结构抽象主题(Subject):具体主题(Concrete Subject&#xf…

python使用pip进行库的下载

前言 现如今有太多的python编译软件,其库的下载也是五花八门,但在作者看来,无论是哪种方法都是万变不离其宗,即pip下载。 pip是python的包管理工具,无论你是用的什么python软件,都可以用pip进行库的下载。 …

Apache Solr RCE(CVE-2017-12629)--vulhub

Apache Solr 远程命令执行漏洞(CVE-2017-12629) Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发,主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个…

apisix转发websocket

1、说明 apisix网关对接websocket,参数以及使用可以看官方文档 WebSocket Authentication | Apache APISIX -- Cloud-Native API Gateway 注意事项: (1)官方文档是websocket要加认证,但自测发现可以不加认证插件 …

【unity】【游戏开发】Unity项目一运行就蓝屏报Watch Dog Timeout

【背景】 由于是蓝屏所以没法截屏,总之今天遇到了一开Unity,过一阵就蓝屏的情况,报Watch Dog Timeout。 【分析】 通过任务管理器查看,发现Unity占用率100%,再观察Unity内部,每次右下角出现一个Global I…

【unity小技巧】unity最完美的CharacterController 3d角色控制器,实现移动、跳跃、下蹲、奔跑、上下坡、物理碰撞效果,复制粘贴即用(2024/12/12补充)

最终效果 文章目录 最终效果更好的方式(2024/12/12补充)前言为什么使用CharacterControllerSimpleMove和Move如何选择?1. SimpleMove2. Move 配置CharacterController参数控制相机移动跳跃方式一方式二 下蹲处理下坡抖动问题实现奔跑和不同移…

sentinel学习笔记6-限流降级(上)

本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏,写的好值得推荐,我整理的有所删减,推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…

使用 UniApp 在微信小程序中实现 SSE 流式响应

概述 服务端发送事件(Server-Sent Events, SSE)是一种允许服务器向客户端推送实时更新的技术。SSE 提供了一种单向的通信通道,服务器可以持续地向客户端发送数据,而不需要客户端频繁发起请求。这对于需要实时更新的应用场景非常有…

监控易在汽车制造行业信息化运维中的应用案例

引言 随着汽车制造行业的数字化转型不断深入,信息化类IT软硬件设备的运行状态监控、故障告警、报表报告以及网络运行状态监控等成为了企业运维管理的关键环节。监控易作为一款全面、高效的信息化运维管理工具,在汽车制造行业中发挥着重要作用。本文将结合…