| 项目 | 信息 |
|---|---|
| 版本 | 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 | 核心初始化,加载所有核心类、插件、主题 |
| 分类 | 文件 | 功能 |
|---|---|---|
| 启动引导 | 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 | 工具与数据导入导出 |
| AJAX | admin-ajax.php | 异步请求处理 |
| 分类 | 核心类 | 功能 |
|---|---|---|
| 数据库 | 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 API | WP_REST_Server | REST 服务器 |
WP_REST_Request/Response | 请求/响应处理 | |
| HTTP | WP_Http | HTTP 请求封装 |
| 错误处理 | WP_Error | 错误封装类 |
| Hook 系统 | WP_Hook | 钩子实现 |
wp-content/ ├── themes/ # 主题目录 │ ├── twentynineteen/ # 2019 默认主题 │ ├── twentytwenty/ # 2020 默认主题 │ └── twentytwentyone/ # 2021 默认主题 (当前默认) │ ├── plugins/ # 插件目录 │ ├── akismet/ # Akismet 反垃圾评论 │ └── hello.php # Hello Dolly 示例插件 │ ├── uploads/ # 上传文件 (按年月组织) ├── mu-plugins/ # 必须使用插件 (可选) └── languages/ # 语言包 (可选)
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_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.php → home.php → index.php |
| 文章 | single-{type}-{slug}.php → single-{type}.php → single.php → index.php |
| 页面 | page-{slug}.php → page-{id}.php → page.php → index.php |
| 分类 | category-{slug}.php → category-{id}.php → category.php → archive.php |
| 标签 | tag-{slug}.php → tag-{id}.php → tag.php → archive.php |
| 搜索 | search.php → index.php |
| 404 | 404.php → index.php |
| 机制 | 说明 |
|---|---|
| Nonce | 一次性令牌防止 CSRF 攻击 |
| KSES | HTML 过滤防止 XSS 攻击 |
| wpdb::prepare() | 参数化查询防止 SQL 注入 |
| esc_ 函数* | 输出转义 (esc_html, esc_attr, esc_url) |
| sanitize_ 函数* | 输入清理 |
| Capabilities | 基于角色的权限控制 |
| 安全密钥 | AUTH_KEY 等用于 Cookie 加密 |
复制配置模板并编辑:
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' );
访问 https://api.wordpress.org/secret-key/1.1/salt/ 获取随机密钥,替换配置文件中的占位符。
通过浏览器访问您的 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/ │ │ (后台管理界面) │ │ (主题/插件/上传) │ └─────────────────────┘ └─────────────────────────┘
核心设计模式:
add_action/add_filter 实现松耦合的插件架构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.