logo
0
0
WeChat Login
godog431<aayou_123@163.com>
docs: 添加项目架构与业务逻辑分析文档

WordPress 5.8 项目架构分析

WordPress PHP MySQL

📋 项目概览

项目信息
版本WordPress 5.8
数据库版本49752
PHP 要求>= 5.6.20
MySQL 要求>= 5.0
TinyMCE 版本49110-20201110

WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统 (CMS),以其强大的插件生态系统和主题定制能力著称。


🏗️ 项目架构

目录结构

wordpress/ ├── index.php # 前端入口文件 ├── wp-load.php # 引导加载文件 ├── wp-blog-header.php # 环境和模板加载器 ├── wp-settings.php # 核心初始化 ├── wp-config-sample.php # 配置文件模板 ├── wp-login.php # 登录页面 ├── wp-signup.php # 注册页面 ├── wp-cron.php # 定时任务 ├── xmlrpc.php # XML-RPC 接口 │ ├── wp-admin/ # 后台管理模块 │ ├── admin.php # 后台入口 │ ├── index.php # 仪表盘 │ ├── includes/ # 后台辅助类 │ ├── css/ # 后台样式 │ ├── js/ # 后台脚本 │ └── images/ # 后台图片 │ ├── wp-includes/ # 核心库 │ ├── class-wp-*.php # 90+ 核心类 │ ├── rest-api/ # REST API 模块 │ ├── blocks/ # 古腾堡区块 │ ├── widgets/ # 小工具 │ ├── js/ # 前端脚本 │ └── css/ # 前端样式 │ └── wp-content/ # 用户内容 ├── themes/ # 主题目录 ├── plugins/ # 插件目录 └── uploads/ # 上传文件 (运行时创建)

🔄 请求处理流程

用户请求 │ ▼ ┌─────────────────┐ │ index.php │ ← 前端入口,定义 WP_USE_THEMES = true └────────┬────────┘ │ ▼ ┌─────────────────┐ │wp-blog-header.php│ ← 加载 WordPress 库并设置查询 └────────┬────────┘ │ ▼ ┌─────────────────┐ │ wp-load.php │ ← 定义 ABSPATH,加载配置文件 └────────┬────────┘ │ ▼ ┌─────────────────┐ │ wp-config.php │ ← 数据库配置、密钥、调试模式 └────────┬────────┘ │ ▼ ┌─────────────────┐ │ wp-settings.php │ ← 核心初始化:加载所有核心类和插件 └────────┬────────┘ │ ▼ ┌──────────────────────┐ │template-loader.php │ ← 根据 URL 加载对应主题模板 └──────────────────────┘

核心入口文件说明

文件作用
index.php应用前端入口,定义 WP_USE_THEMES = true
wp-blog-header.php环境和模板加载器,调用 wp() 设置查询
wp-load.php引导文件,定义 ABSPATH,查找配置文件
wp-config.php数据库连接、安全密钥、表前缀、调试模式
wp-settings.php核心初始化,加载所有核心类、插件、主题

📁 业务模块详解

1. wp-admin - 后台管理 (91个 PHP 文件)

分类文件功能
启动引导admin.php后台入口,定义 WP_ADMIN,认证检查
仪表盘index.php管理首页/仪表盘
内容管理edit.php, post.php, post-new.php文章列表、编辑、新建
edit-form-blocks.php古腾堡区块编辑器
upload.php, media.php媒体库管理
edit-comments.php评论管理
分类管理edit-tags.php, term.php分类/标签管理
外观管理themes.php, customize.php主题管理、定制器
nav-menus.php, widgets.php菜单、小工具
插件管理plugins.php, plugin-install.php插件安装与管理
用户管理users.php, user-new.php, profile.php用户 CRUD
设置options-*.php常规/写作/阅读/讨论等设置
工具tools.php, import.php, export.php工具与数据导入导出
AJAXadmin-ajax.php异步请求处理

2. wp-includes - 核心库 (90+ 核心类)

分类核心类功能
数据库wpdb数据库抽象层,防 SQL 注入
查询系统WP_Query主查询类
WP_Tax_Query分类查询
WP_Meta_Query元数据查询
WP_User_Query用户查询
数据模型WP_Post文章对象
WP_User用户对象
WP_Comment评论对象
WP_Term术语对象
用户权限WP_Roles, WP_Role角色与权限管理
主题系统WP_Theme主题信息
WP_Theme_JSON主题配置 (FSE)
WP_Customize_Manager主题定制器
区块编辑器WP_Block区块对象
WP_Block_Type区块类型注册
WP_Block_Parser区块解析器
REST APIWP_REST_ServerREST 服务器
WP_REST_Request/Response请求/响应处理
HTTPWP_HttpHTTP 请求封装
错误处理WP_Error错误封装类
Hook 系统WP_Hook钩子实现

3. wp-content - 用户内容

wp-content/ ├── themes/ # 主题目录 │ ├── twentynineteen/ # 2019 默认主题 │ ├── twentytwenty/ # 2020 默认主题 │ └── twentytwentyone/ # 2021 默认主题 (当前默认) │ ├── plugins/ # 插件目录 │ ├── akismet/ # Akismet 反垃圾评论 │ └── hello.php # Hello Dolly 示例插件 │ ├── uploads/ # 上传文件 (按年月组织) ├── mu-plugins/ # 必须使用插件 (可选) └── languages/ # 语言包 (可选)

🔗 Hook (钩子) 系统

WordPress 的插件架构基于 Hook 系统,分为 Action (动作) 和 Filter (过滤器)。

核心钩子执行顺序

// wp-settings.php 中的关键钩子 muplugins_loaded // MU 插件加载完成 plugins_loaded // 所有插件加载完成 setup_theme // 主题加载前 after_setup_theme // 主题加载后 init // WordPress 初始化完成 wp_loaded // 完全加载 // 模板加载钩子 wp // 主查询完成 template_redirect // 模板重定向前 wp_head // <head> 中 wp_footer // </body> 前 shutdown // 脚本结束

使用示例

// Action: 执行动作,无返回值 add_action( 'init', 'my_init_function' ); do_action( 'init' ); // Filter: 过滤数据,必须返回值 add_filter( 'the_content', 'my_content_filter' ); $content = apply_filters( 'the_content', $content );

🗄️ 数据库架构

核心数据表 (默认前缀 wp_)

表名用途
wp_posts文章、页面、附件、修订版、菜单项
wp_postmeta文章元数据
wp_comments评论
wp_commentmeta评论元数据
wp_terms分类/标签术语
wp_term_taxonomy术语与分类法关联
wp_term_relationships文章与术语关联
wp_termmeta术语元数据
wp_users用户
wp_usermeta用户元数据
wp_options站点设置

安全查询示例

global $wpdb; // 使用 prepare 防止 SQL 注入 $results = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->posts} WHERE post_status = %s", 'publish' ) );

🎨 模板层次结构

WordPress 根据请求类型自动选择模板文件,优先级从左到右:

页面类型模板优先级
首页front-page.phphome.phpindex.php
文章single-{type}-{slug}.phpsingle-{type}.phpsingle.phpindex.php
页面page-{slug}.phppage-{id}.phppage.phpindex.php
分类category-{slug}.phpcategory-{id}.phpcategory.phparchive.php
标签tag-{slug}.phptag-{id}.phptag.phparchive.php
搜索search.phpindex.php
404404.phpindex.php

🔒 安全机制

机制说明
Nonce一次性令牌防止 CSRF 攻击
KSESHTML 过滤防止 XSS 攻击
wpdb::prepare()参数化查询防止 SQL 注入
esc_ 函数*输出转义 (esc_html, esc_attr, esc_url)
sanitize_ 函数*输入清理
Capabilities基于角色的权限控制
安全密钥AUTH_KEY 等用于 Cookie 加密

🚀 快速开始

1. 配置数据库

复制配置模板并编辑:

cp wp-config-sample.php wp-config.php

编辑 wp-config.php,填入数据库信息:

define( 'DB_NAME', 'your_database_name' ); define( 'DB_USER', 'your_database_user' ); define( 'DB_PASSWORD', 'your_database_password' ); define( 'DB_HOST', 'localhost' );

2. 生成安全密钥

访问 https://api.wordpress.org/secret-key/1.1/salt/ 获取随机密钥,替换配置文件中的占位符。

3. 运行安装向导

通过浏览器访问您的 WordPress 站点,按照安装向导完成设置。


📚 架构总结

WordPress 5.8 是一个成熟的、基于 Hook 系统的模块化 CMS 架构:

┌─────────────────────────────────────────────────────────────┐ │ 入口层 │ │ index.php → wp-blog-header.php → wp-load.php → wp-config │ └─────────────────────────────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────────────────────────────┐ │ 核心层 │ │ wp-includes/ (90+ 核心类, 200+ 功能文件) │ └─────────────────────────────────────────────────────────────┘ │ ┌───────────────────┴───────────────────┐ ▼ ▼ ┌─────────────────────┐ ┌─────────────────────────┐ │ 管理层 │ │ 扩展层 │ │ wp-admin/ │ │ wp-content/ │ │ (后台管理界面) │ │ (主题/插件/上传) │ └─────────────────────┘ └─────────────────────────┘

核心设计模式:

  • MVC 变体: 数据库层 (wpdb) + 业务逻辑层 (wp-includes) + 视图层 (主题模板)
  • Hook 系统: 通过 add_action/add_filter 实现松耦合的插件架构
  • 模板层次: 灵活的主题模板优先级机制

📖 参考资源


📄 License

WordPress is free software, and is released under the terms of the GNU General Public License version 2 or (at your option) any later version. See license.txt for details.