代码编辑器

要进行 WordPress 开发,你还需要一种编写和编辑 WordPress 代码的工具。

选择代码编辑器

所有代码本质上都是文本,因此理论上你可以使用操作系统自带的文本编辑器来编写和编辑 WordPress 代码。

但这样你就会错过真正的代码编辑器和集成开发环境(IDE)所提供的所有最佳功能。

如果你还没有一个自己习惯使用的代码编辑器或 IDE,以下是一些可供考虑的选择。

Visual Studio Code

Visual Studio Code 是由微软创建的一款免费开源的代码编辑器。它支持 Windows、Mac 和 Linux 系统。它支持多种语言,包括 HTML、PHP、JavaScript 和 CSS。它还提供内置终端等附加功能,并可通过扩展添加更多功能。

VIM

VIM 是一款免费开源的文本编辑器,支持 Windows、Mac 和 Linux 系统。它是一款基于命令行的编辑器,不如其他编辑器那样用户友好。但它提供了广泛的功能,并且高度可定制。

Brackets

Brackets 是一款免费开源的代码编辑器,最初由 Adobe 创建,现已开源。它支持 Windows、Mac 和 Linux 系统。Brackets 与 Visual Studio Code 类似,支持多种语言,并可通过扩展添加更多功能。

Sublime Text

Sublime Text 是一款代码编辑器,支持 Windows、Mac 和 Linux 系统。它不是免费的,但提供免费试用版。在 Visual Studio Code 发布之前,它是另一款流行的代码编辑器。

Notepad++

Notepad++ 是一款免费开源的编辑器,仅支持 Windows 系统。它通常被视为 Windows 默认文本编辑器的强大替代品,同时也作为代码编辑器而广受欢迎。

TextMate

TextMate 是一款免费开源的编辑器,仅支持 Mac 系统。与 Notepad++ 类似,它是 MacOS 默认文本编辑器的替代品,并提供代码编辑器功能。

PhpStorm

PhpStorm 是由 JetBrains 创建的一款功能完整的集成开发环境。它支持 Windows、Mac 和 Linux 系统。它不是免费的,但提供免费试用版,并且深受使用 PHP 应用程序的开发者的欢迎。

选择代码编辑器

就像选择本地开发环境一样,选择代码编辑器是个人选择,没有绝对的对错之分。

在 Learn.WordPress.org 的大部分内容中,我们将使用 Visual Studio Code,但你也可以自由选择自己最习惯使用的任何代码编辑器。

WordPress 安装

一旦你确定了本地开发环境,就需要安装 WordPress 核心文件,以便在你的电脑上搭建一个可运行的 WordPress 站点。

像 LocalWP、DevKinsta 和 VVV 这类工具都提供了自动创建新本地站点并为你安装 WordPress 的功能。要使用这些功能,你需要查阅所选工具的文档,因此可以跳过本课。

然而,如果你决定使用 MAMP 或 XAMPP 这类工具,就需要自己手动安装 WordPress,这正是本课要教你的内容。

虽然手动安装 WordPress 并非必备技能,但了解这一过程对将来可能遇到的情况会很有帮助。

前提条件

在安装 WordPress 之前,你需要了解本地开发环境的以下信息。

  • 文档根目录或网站根目录的位置。这是本地开发环境用来向浏览器提供文件的文件夹。
  • 数据库详细信息。包括数据库服务器名称、数据库名称、数据库用户名和数据库密码。在本地开发环境中,数据库服务器名称通常是 localhost,数据库用户名通常是 root。数据库密码要么为空,要么是 password。你可能需要为你的 WordPress 站点创建一个新数据库。
  • 本地站点的 URL。这是你在浏览器中访问本地站点时使用的网址。

建议查阅本地开发环境的文档来获取这些信息。

下载 WordPress

第一步是下载 WordPress 核心文件。你可以从 WordPress.org 网站的“获取 WordPress”页面进行下载。

点击“下载 WordPress”按钮,即可下载最新版本的 WordPress,该版本以 zip 文件形式提供。

根据浏览器的不同,你可能会被提示保存文件,或者文件会自动下载。文件可能默认保存在“下载”文件夹中,如果你设置了自定义文件夹,则会保存在那里。

如果你使用的是 Mac 上的 Safari 浏览器,zip 文件可能会自动解压。如果没有,你需要手动解压文件。无论如何,你的电脑上最终会有一个名为 wordpress 的文件夹。

打开该文件夹,你会看到 WordPress 核心文件。

将 WordPress 文件复制到本地开发环境

下一步是将 WordPress 文件复制到本地开发环境的文档根目录中。

著名的五分钟安装

将 WordPress 文件复制到本地开发环境后,现在可以安装 WordPress 了。为此,在浏览器中访问本地站点的 URL。这将启动 WordPress 安装过程。

第一步是选择语言。选择语言后,点击蓝色的“继续”按钮。

你会看到一个屏幕,说明完成安装所需的信息。点击蓝色的“开始安装!”按钮继续。

现在系统会要求你输入数据库详细信息。包括数据库服务器名称、数据库名称、数据库用户名和数据库密码。你还需要选择一个表前缀,或者接受默认值。

输入所有详细信息后,点击“提交”按钮。

如果数据库详细信息不正确,你会看到一条错误消息。你需要检查数据库详细信息并重试。

如果数据库详细信息正确,你会看到一个屏幕,确认安装已准备就绪。

在此过程中,会在 WordPress 安装根目录中创建一个 wp-config.php 文件。该文件包含你输入的所有数据库详细信息,WordPress 用它来连接数据库。

点击蓝色的“运行安装”按钮继续。WordPress 将使用数据库详细信息连接数据库并创建数据库表。

现在系统会要求你输入一些关于站点的信息。包括站点标题、管理员用户名和密码,以及管理员电子邮件地址。

系统会为管理员用户生成一个安全密码,但你可以根据需要更改它。

你还可以选择是否阻止搜索引擎索引你的站点。

输入所有详细信息后,点击“安装 WordPress”按钮继续。

此过程将在用户表中创建管理员用户(用户 ID 为 1)。它还会设置默认的站点选项。

现在你会看到一个屏幕,确认安装已完成。你可以使用之前输入的管理员用户名和密码登录本地站点。

总结

恭喜你,已成功在本地开发环境中安装 WordPress。

关于此过程的更多信息,可参考 WordPress.org 开发者文档中的“如何安装 WordPress”部分。

本地开发环境

要使用 WordPress 进行开发,您需要在计算机上安装一些工具,其中首要的就是本地开发环境。

本地开发环境有很多选择,在本课程中,您将了解一些最流行的选项。

术语快速入门

开发人员倾向于使用不同的术语来指代他们可能使用的不同 WordPress 环境。

存在于互联网上、用户与之交互的 WordPress 网站通常被称为线上环境或生产环境。这是所有最终内容发布以及任何自定义代码上线的地方。

有时,开发人员会创建一个单独的服务器环境来测试新功能或对网站进行更改。这通常被称为预发布环境。这是线上网站的一个副本,可通过互联网访问,但通常只有网站所有者或开发人员才能访问。它用于在将新功能或更改部署到线上网站之前进行测试。

最后,开发人员通常会有一个本地环境。这是安装在他们计算机上的线上或预发布网站的副本。他们将在其中完成大部分开发工作。

本地开发环境

拥有一个您熟悉的本地开发环境,可以让您专注于编写代码,而无需担心在计算机上设置 Web 服务器和数据库服务器的复杂性。它还允许您离线工作,并在无需将代码上传到线上网站的情况下进行测试。

一些本地开发环境还提供额外功能,例如内置数据库管理工具,或快速更改 PHP 版本的能力。

在 WordPress 领域,通常有两种类型的本地开发环境:由 WordPress 社区成员创建和维护的环境,以及由非营利组织或公司创建和维护的环境。

wp-env 是目前 WordPress 开发者文档推荐的本地开发环境。

它需要具备命令行操作知识,并安装 Docker 和 Node.js。

VVV(即 Varying Vagrant Vagrants)是另一个由 WordPress 社区成员维护的本地开发环境。它也需要具备命令行操作知识,并安装 VirtualBox 和 Vagrant。

另一个免费开源的选择是 XAMPP。XAMPP 是由 Apache Friends(一个旨在推广 Apache Web 服务器的非营利项目)维护的本地开发环境。虽然它并非专门针对 WordPress 的本地开发环境,但它包含了您所需的一切:Apache Web 服务器、数据库服务器和 PHP。

与 XAMPP 类似,MAMP 是另一个并非专门为 WordPress 设计的本地开发环境,但它包含了入门所需的一切。与 XAMPP 不同,MAMP 不是开源的,并且提供免费版和付费版。

其他 WordPress 本地开发环境包括 WordPress Studio 和 DevKinsta。

这些产品均由各自的母公司创建和维护,并且各自提供独特的功能。

选择本地开发环境

选择本地开发环境是个人选择,没有绝对的正确或错误答案。

您需要审查每个选项的所有功能、优缺点,并决定哪个最适合您。

管理页面请求

WordPress 管理界面的功能由 wp-admin 目录中的所有文件处理。

让我们更深入地了解一下典型 WordPress 管理请求所运行的代码,并理解它与前端请求的不同之处。

什么是管理请求?

与典型的前端请求不同,根据所使用的功能,会执行不同的 PHP 文件。此外,仪表盘中不使用固定链接,而是使用查询字符串将数据传递到这些位置。

例如,管理仪表盘的默认 URL 是 https://example.com/wp-admin/

这将加载 wp-admin 目录中的 index.php 文件。

但是,如果您想查看网站中的文章,URL 是 https://example.com/wp-admin/edit.php

这将加载 wp-admin 目录中的 edit.php 文件。

如果您点击“编辑文章”按钮,请求的 URL 是 https://example.com/wp-admin/post.php?post=1&action=edit

这将加载 wp-admin 目录中的 post.php 文件,并向其传递 edit 操作和 post ID 为 1。然后使用这些查询字符串变量来决定显示什么内容。

然而,这些不同的管理文件在运行方式上有很多共同点。

  1. 包含 wp-admin/admin.php 文件,该文件设置 WordPress 环境
    1. 此文件设置任何管理特定的常量,然后包含前端使用的同一个 wp-load.php 文件,该文件进而包含 wp-config.php 以包含 WordPress 安装的所有配置设置,以及设置 WordPress 环境的 wp-settings.php
  2. 然后,该文件将加载任何特定的内部功能,但仅针对管理界面的这一特定部分。
    1. 对于仪表盘,它将包含位于 wp-admin/includes/dashboard.phpWordPress 仪表盘 API
    2. 然后,它将设置仪表盘功能所需的任何特定内容和变量
  3. 接下来,它将包含 wp-admin/admin-header.php 文件,该文件执行诸如设置和渲染管理界面的头部区域以及渲染管理菜单等操作。
  4. 之后,它将生成并渲染特定管理页面的内容
  5. 最后,它将包含 wp-admin/admin-footer.php 文件,该文件设置并渲染管理界面的页脚

前端页面请求

对WordPress站点可以发起两种类型的请求:前端请求和管理后台请求。让我们更深入地了解典型WordPress前端请求所运行的代码。

什么是前端请求?

除了特定请求(比如我们在文件结构课程中看到的那些)之外,任何对WordPress站点内容(也称为WordPress前端)的请求都由根目录中的index.php文件处理。

在这里,设置了WP_USE_THEMES常量,然后引入了第一个附加文件wp-blog-header.php

关于require、require_once、include、include_once的说明

require是一个特殊的PHP语句,它会包含被引入文件的内容。PHP中有一个类似的语句叫include,功能相同。区别在于,如果文件无法被引入,使用require会抛出错误并终止执行。

还有补充语句,即require_once(或include_once),它们仅在文件尚未被引入时才会包含该文件。

wp-blog-header.php

wp-blog-header.php文件通过引入wp-load.php文件来设置WordPress环境。

wp-load.php

在这里定义了ABSPATH常量,大多数插件用它来检查插件是否确实在WordPress环境中运行。

然后,该文件设置了一些错误报告级别。

之后,它查找并加载wp-config.php文件,或者尝试重定向到/wp-admin/setup-config.php,以通知用户创建wp-config.php文件。

你还会注意到,这段代码允许将wp-config.php文件移动到WordPress目录之外,这是一种常见的安全最佳实践。通过将wp-config.php文件移出WordPress目录,可以防止恶意用户访问该文件。

wp-config.php

该文件定义了数据库常量、调试常量以及WordPress安装可能需要的其他常量。

然后,它引入了wp-settings.php文件,该文件用于设置WordPress环境。

wp-settings.php

wp-settings.php是设置WordPress环境的文件。它做了很多工作,因此这里将对其设置的所有内容进行一个高级摘要。

  1. 设置版本信息
  2. 引入初始化所需的任何文件
  3. 设置大多数默认常量
  4. 注册一个致命错误处理器,以防出现任何问题
  5. 设置各种服务器变量,检查维护模式并检查调试模式
  6. 引入WordPress核心功能所需的核心WordPress文件
  7. 设置数据库层和全局数据库变量
  8. 初始化多站点
  9. 定义SHORTINIT常量,可用于自定义请求
  10. 加载其余WordPress文件
  11. 加载必须使用的插件
  12. 加载网络激活的插件(如果是多站点)
  13. 设置Cookie或SSL所需的任何常量
  14. 创建任何公共变量
  15. 创建核心分类法和文章类型
  16. 注册主题目录根路径
  17. 加载激活的插件
  18. 加载可插入函数(已不再使用)
  19. 为任何请求变量添加魔术引号
  20. 创建全局WP_Query对象WP_Rewrite对象、WP对象、WP_Widget_Factory对象、WP_Roles对象
  21. 设置区域设置功能(多语言支持和本地化/翻译)
  22. 加载激活主题的functions.php文件
  23. 为定时任务创建WP_Site_Health实例

wp()函数

回到wp-blog-header.php文件,一旦WordPress环境设置完成,就会调用wp()函数。该函数确定需要渲染的内容,并从数据库中获取相关数据。

wp()函数调用$wp对象的main方法,该对象位于wp-includes/class-wp.php文件中。

该方法调用init()方法。

该方法调用wp_get_current_user()函数,该函数设置当前用户对象。

然后,它调用parse_request()方法。

该方法解析请求,并根据请求设置查询变量。

这个方法做了很多工作,但简而言之,它将请求与重写规则进行匹配,并根据匹配的规则创建$query_vars数组。如果没有匹配的重写规则,它将尝试基于查询字符串填充$query_vars数组。

回到 main 方法,如果 parse_request() 返回 true,它将调用 query_posts()handle_404()register_globals() 方法。

query_posts() 调用 build_query_string() 方法,该方法根据查询变量构建查询字符串。

然后它调用 $wp_the_query 对象的 query() 方法。这段代码位于 wp-includes/class-wp-query.php 文件中的 WP_Query 类中。这将执行查询并用结果填充 WP_Query 对象。

一旦它初始化查询并解析参数,就会运行 get_posts() 方法,该方法根据传入的查询参数/永久链接创建 SQL 查询,然后针对数据库运行查询以返回相关数据。

handle_404() 用于设置 404 的标头,如果请求的 URL 没有找到任何内容。

最后,register_globals() 将查询变量注册为全局变量。

完成这些之后,会调用 send_headers() 方法,该方法将任何相关的标头发送到浏览器。

最后但同样重要的是,它会运行已添加到 wp 动作钩子中的所有回调函数。你将在后续课程中了解钩子。

template-loader.php

回到 wp-blog-header.php,在所有查询数据设置完成后,会加载模板加载器。它会根据访问者的 URL 查找并加载正确的模板。

  1. template_redirect 动作 – 在加载模板之前触发。
  2. is_robots() – 检查请求是否针对 robots.txt 文件。
  3. is_favicon() – 检查请求是否针对 favicon.ico 文件。
  4. is_feed() – 检查请求是否针对 RSS 订阅源。
  5. is_trackback() – 检查请求是否针对 trackback。
  6. 如果 wp_using_themes
    1. 遍历每个模板条件,并找到相应的模板文件。
  7. template_include 过滤器 – 在包含当前模板之前过滤其路径。
  8. 包含模板文件 – 注意使用的是 include 而不是 require,这样即使模板文件缺失,页面的其余部分仍然可以渲染。

固定链接,在Apache和Nginx上重写URL

在本课中,你将学习一个名为“固定链接”的概念,以及如何在 WordPress 网站中使用它来重写动态 URL。

介绍

在 Web 服务器课程中,你了解到大多数基于 PHP 的应用程序(包括 WordPress)都会有一个目录索引文件。

当用户浏览到相关网站的 URL 时,这个文件就会被执行。

然而,对于由 WordPress 驱动的网站,可以通过同一个目录索引文件渲染多种不同类型的内容,比如文章、页面或产品。

实现这一功能的关键在于一个名为“固定链接”的特性。

查询字符串变量

在深入探讨固定链接之前,了解一个名为“查询字符串”的概念会很有帮助。

让我们看一个测试 WordPress 安装中的例子。

https://wordpress.test/?p=1

在这个例子中,URL 是 https://wordpress.test/,查询字符串是 ?p=1。查询字符串是一种向 Web 服务器传递数据的方式。这里,查询字符串将值 1 传递给了变量 p

在 PHP 中,可以使用超全局变量 $_GET 来访问变量 p 的值。

<?php
$p = $_GET['p'];

然后,PHP 代码可以利用这个值来执行某种数据查找,例如,从数据库中检索 ID 为 1 的文章。

固定链接,也称为“干净 URL”,是一种让 URL 更易于人类阅读的方式。

固定链接不使用查询字符串,而是基于所请求的内容来构建 URL 结构。

以下是上面例子的相同内容,但使用了固定链接。

https://wordpress.test/1/

在这个例子中,URL 是 https://wordpress.test/1/。没有查询字符串,URL 也更易于人类阅读。但 Web 服务器如何知道要提供什么内容呢?

根据预期的 URL 结构,可以配置 Web 服务器来执行 URL 映射,这利用了 Web 服务器的一个特性,称为 URL 重写。Web 服务器可以配置为期望某种 URL 结构,并将这些数据传递给 Web 应用程序,由应用程序根据接收到的数据来处理相关信息的获取。

WordPress 与固定链接

WordPress 有一个名为“固定链接”的功能,它允许你配置 WordPress 网站的 URL 结构。你可以在 WordPress 仪表盘的 设置 > 固定链接 下找到这个功能。

默认的固定链接结构是“朴素”,这意味着没有使用固定链接,而是使用普通的查询字符串。

其他选项允许你从常见选项列表中选择所需的固定链接结构,或者定义你自己的自定义结构。

当你选择除“朴素”之外的任何选项时,服务器将被配置为根据你定义的结构来期望一个干净 URL。同时,WordPress 会将所选结构存储在数据库中。当使用匹配结构的请求访问网站时,WordPress 会利用这两部分数据将 URL 结构映射到需要显示的信息,获取该信息,并将其显示在页面上。

在 Apache Web 服务器上,这通常通过 .htaccess 文件来处理。例如,如果你将固定链接结构设置为除“朴素”之外的任何选项,以下代码将被添加到你的 .htaccess 文件中:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

这会检查 Apache Web 服务器是否启用了重写模块,然后设置重写规则以期望一个干净 URL 结构。

在 Nginx Web 服务器上,这通常通过服务器块配置文件来处理。由于 Nginx 不支持在每个 WordPress 级别使用类似 .htaccess 文件的配置,因此该配置通常默认添加到服务器块的位置指令中。

location / {
            try_files $uri $uri/ /index.php?$args; 
}

每当设置了固定链接结构时,如果你添加指向内部内容(如文章或页面)的链接,WordPress 会根据你设置的固定链接结构自动生成正确的 URL。

WordPress 数据库

WordPress 使用数据库来存储、检索和显示你在网站上创建的所有内容,包括文章、页面、评论等。

数据库还用于存储网站用户的信息,以及驱动网站运行的各种站点选项。

正如你在 Web 服务器课程中学到的,WordPress 使用 MySQL。MySQL 是一个免费、开源的关系型数据库管理系统,被许多流行的网络应用程序所采用。

与 WordPress 数据库交互

有几种方法可以直接与你的 WordPress 数据库进行交互。

大多数本地开发环境或托管公司使用一个名为 phpMyAdmin 的免费工具。phpMyAdmin 是一个基于网页的工具,允许你通过浏览器与 WordPress 数据库进行交互。

phpMyAdmin 的一个替代工具是 Adminer。Adminer 是一个单一的 PHP 文件,你可以将其上传到网站,它提供与 phpMyAdmin 类似的界面。一些托管公司和本地开发环境更倾向于使用 Adminer 而不是 phpMyAdmin。

最后,如果你无法使用上述两种工具,你还可以安装一个名为 SQL Buddy 的插件。

这是一个免费的 WordPress 插件,提供与 phpMyAdmin 和 Adminer 类似的界面,但它运行在你的 WordPress 仪表盘内。

如果你决定使用 SQL Buddy,请记得在使用完毕后停用并删除该插件。将其保留在网站上可能存在安全风险。

数据库表

在本课程中,我们将使用 PhpMyAdmin 来检查数据库表。

WordPress 数据库由许多表组成。每个表存储网站的不同类型数据。

每个表都有相同的前缀,该前缀在 wp-config.php 文件中定义。默认情况下,前缀是 wp_,但你可以在 WordPress 安装过程中将其更改为任何你喜欢的名称。

让我们先看看管理内容最重要的几个表。

wp_posts 和 wp_postmeta

wp_posts 表可能是 WordPress 网站中最重要的表,它存储有关网站文章、页面或任何其他自定义文章类型的信息。wp_posts 表中的每一行代表一篇文章。wp_postmeta 表允许你存储每篇文章的附加信息。文章元数据通常也被称为自定义字段。

wp_comments 和 wp_commentmeta

wp_comments 表存储有关文章和页面评论的信息。每当有人在文章或页面上发表评论时,该评论就存储在此表中。wp_comments 表中的每一行代表一条评论。wp_commentmeta 表可以存储每条评论的附加信息。

wp_users 和 wp_usermeta

wp_users 表存储有关网站用户的所有信息。wp_users 表中的每一行代表一个用户。与其他元数据表类似,wp_usermeta 表可以存储每个用户的附加信息。

与文章、评论和用户交互的函数

对于所有 WordPress 数据库表,都有相应的函数可以用来与该表进行交互。

这些函数构成了 WordPress 数据库 API 的一部分。

所有这些函数都可以通过 WordPress 开发者文档中的搜索功能找到,位于代码参考部分。

通常,用于与 WordPress 数据库交互的函数都遵循类似的模式。

有插入函数、更新函数和删除函数。

这些函数通常具有相同的名称,前缀为 wp_,后跟操作名称,再后跟表名。

让我们以文章为例来看这些函数:

  • wp_insert_post 是创建新文章的函数
  • wp_update_post 是更新现有文章的函数
  • wp_delete_post 是删除文章的函数

通常还有用于获取表中所有记录或单条记录的函数。

这些函数通常具有相同的名称,前缀为 get_,后跟表的单数或复数名称。

例如,get_posts 是用于获取文章集合的函数。

get_post 是用于获取单篇文章的函数。

这些函数通常都有许多参数,你可以用来过滤返回的结果。

此外,还有用于与任何元数据表交互的函数,通常用于插入、更新或删除元数据字段。

这些函数通常具有相同的命名规则:以操作名称开头,后跟数据表的单数名称,再以 _meta 结尾。

例如,对于文章(posts),add_post_meta 是用于插入元字段的函数。

类似地,update_post_meta 是用于更新元字段的函数,而 delete_post_meta 是用于删除元字段的函数。

wp_terms、wp_termmeta、wp_term_relationships 和 wp_term_taxonomy

wp_termswp_termmetawp_term_relationshipswp_term_taxonomy 这些数据表用于管理 WordPress 网站中的分类和标签。

wp_terms 表存储了网站中“术语”的信息。该表中的每一行代表一个单独的术语。在底层实现中,分类和标签都属于术语。

决定它们是分类还是标签的关键在于它们关联的分类法(taxonomy),而分类法信息存储在 wp_term_taxonomy 表中。

wp_term_relationships 表存储了术语与其父对象(无论是文章、页面还是自定义文章类型)之间的关系。

最后,wp_termmeta 表可以存储每个术语的附加信息。

与术语和分类法交互的函数

与用于交互文章、评论和用户的函数类似,也存在用于交互术语和分类法的函数。您可以通过在 WordPress 代码参考中搜索“term”或“taxonomy”来找到它们。

wp_options

wp_options 表存储了网站设置的信息。该表中的每一行代表一个特定的设置。例如,siteurl 选项存储了网站的 URL,而 blogdescription 选项存储了网站的副标题。wp_options 表还存储了网站当前启用的主题和插件的信息。

数据以键值对(key-value)的格式存储在 wp_options 表中。键是选项的名称,值是选项的值。

也可以在 wp_options 表中存储序列化数据。序列化数据是一个包含多个值的字符串。它通常用于存储数组和对象类型的数据。一个很好的例子是当前启用的插件列表,它就是以序列化数组的形式存储的。

与选项交互的函数

选项 API(Options API)通常与设置 API(Settings API)一起使用,用于为 WordPress 仪表盘创建设置页面,无论是通过核心程序、插件还是主题。选项 API 提供了与 wp_options 表交互的函数,例如 add_optionupdate_optiondelete_option

wp_links

wp_links 表存储了网站链接的信息。链接功能在 WordPress 3.5 版本中已被移除。

然而,由于仍然可以通过“链接管理器”插件重新启用此功能,为了向后兼容,该数据表得以保留。

总结

能够正确识别并操作 WordPress 数据库中的数据表是一项极其有用的技能,它将帮助您在开发 WordPress 时更好地理解其工作原理。

WordPress 文件结构

欢迎来到关于 WordPress 文件结构的课程。

与大多数软件应用程序一样,WordPress 由一组按特定结构组织的文件组成。

由于 WordPress 是开源的,当你下载最新版本的 WordPress 压缩包时,你可以查看并检查所有文件。

让我们在 Visual Studio Code(一个免费且开源的代码编辑器)中探索 WordPress 安装的根目录。

根目录

WordPress 网站的根目录包含一系列文件以及三个目录。

静态文件

首先,让我们看看一些静态文件:

.htaccess 文件是一个特殊文件,用于为 WordPress 安装配置 Apache 网络服务器。它本质上是之前我们看到的 Apache 虚拟主机配置的扩展。任何有效的 Apache 指令都可以添加到这个文件中,并将应用于此 WordPress 安装。

值得注意的是,Nginx 不支持在每个 WordPress 级别使用类似 .htaccess 文件的配置。相反,配置是在主服务器块配置文件中完成的。这是 Nginx 被认为比 Apache 更快的原因之一,但也使得网站所有者对其配置性较低。

license.txt 文件包含 WordPress 的许可证信息。WordPress 根据开源 GNU 通用公共许可证第 2 版进行许可。此许可证允许任何人使用、修改和重新分发 WordPress。

readme.html 文件包含有关 WordPress 的信息,包括安装和更新 WordPress 的章节、系统要求以及各种在线资源的链接。作为一个 HTML 文件,最好在网络浏览器中查看。

控制 WordPress 请求的 PHP 文件

现在让我们继续介绍控制典型 WordPress 请求的 PHP 文件。

正如你在网络服务器课程中学到的,index.php 文件是目录索引文件,当用户访问此 WordPress 网站的根 URL 时,它会被执行。

index.php 中的代码被执行时,它会包含 wp-blog-header.php 文件中的代码。如你所见,wp-blog-header.php 包含了 wp-load.php,而后者又包含了 wp-config.php 文件。

wp-config.php 文件是 WordPress 网站的主要配置文件。它包含运行 WordPress 所需的所有配置选项,例如数据库连接信息、安全密钥以及你可能想要添加的任何自定义配置选项。

wp-config.php 然后包含 wp-settings.php 文件,该文件设置所有 WordPress 核心功能。

根目录中的其他 PHP 文件

根目录中还有一些额外的 PHP 文件,它们在常规 WordPress 请求之外执行特定功能。这些文件通常由用户或其他功能直接访问,并不包含在正常的 WordPress 请求流程中。

wp-activate.php 用于确认用户注册新网站后通过电子邮件发送的激活密钥。通常,如果你自己设置 WordPress 安装或管理 WordPress 多站点网络,会用到这个文件。

wp-comments-post.php 用于处理在 WordPress 网站上提交的任何评论。

wp-cron.php 用于运行在 WordPress 网站上设置的任何计划任务。每次请求 WordPress 页面时,此文件都会被执行,并检查是否有任何需要运行的计划任务。如果有,它会运行它们。

wp-links-opml.php 用于生成链接的 XML 列表。这曾被 WordPress 3.5 中移除的链接管理器功能使用。但是,可以使用链接管理器插件启用此功能,因此为了向后兼容,仍然包含此文件。

wp-login.php 用于显示 WordPress 网站的登录表单。它还处理提交的任何登录请求。

wp-mail.php 被 WordPress 的通过电子邮件发布功能使用。此功能允许你通过向特定电子邮件地址发送电子邮件来在 WordPress 网站上发布文章。如果启用,每次收到电子邮件时都会执行此文件以创建新文章。

wp-signup.php 用于在 WordPress 多站点网络上显示新网站的注册表单。

wp-trackback.php 用于处理发送到 WordPress 网站的任何 Trackback 请求。Trackback 是一种方式,让一个网站通知另一个网站它已链接到该网站,通常是在文章内容或评论中。

xmlrpc.php 用于处理发送到 WordPress 网站的任何 XML-RPC 请求。XML-RPC 是一种远程过程调用协议,允许软件向 WordPress 网站发出请求。WordPress 移动应用会用到这个功能,但如果你不使用这些应用来管理网站,可以禁用此功能。

根目录

除了这些文件,WordPress 安装的根目录还包含三个目录:

wp-admin 包含所有支持 WordPress 管理界面的文件。每当你与 WordPress 管理后台交互时,使用的就是此目录中的文件。

wp-content 包含可以添加到默认 WordPress 网站的任何文件。这包括所有插件、主题和上传的文件。插件需要创建以存储额外文件的任何目录也会在此目录中创建。

wp-includes 包含大部分核心 WordPress 文件。这包括构成 WordPress 核心的所有 PHP 文件,以及运行 WordPress 所需的任何 JavaScript 和 CSS 文件。常见功能如数据库 API、HTTP API 和插件 API 都包含在此目录中,并被 WordPress 管理后台和任何前端请求使用。

WordPress与网络服务器

欢迎来到 WordPress 与 Web 服务器入门指南。

如果你想开发自定义的 WordPress 网站、插件或主题,了解 WordPress 在底层是如何运作的非常重要。

你应该首先了解的事情之一就是 WordPress 和 Web 服务器是如何协同工作的。

在本课中,你将学习 Web 服务器的基础知识,以及它们如何驱动你的 WordPress 网站。

什么是 Web 服务器?

在最基本的层面上,WordPress 是一个运行在 Web 服务器上的 Web 应用程序。但是,Web 服务器由什么组成,又是什么让 Web 服务器能够运行 WordPress 呢?

Web 服务器是一台连接到互联网并配置为提供网页服务的计算机。Web 服务器有各种形状、大小和配置,但归根结底,它们都只是计算机,就像你每天工作使用的那台一样。

Web 服务器的不同之处在于,它安装并配置了软件,用于提供像 WordPress 这样的 Web 应用程序服务。

WordPress 运行在一个名为 LAMP 的技术栈上。LAMP 代表 Linux、Apache、MySQL 和 PHP。

Linux 是管理服务器硬件和软件资源的操作系统。流行的 Linux 发行版包括 Debian、Ubuntu、RedHat 和 AlmaLinux。这些操作系统由 Linux 内核和安装在内核之上的一系列软件包组成。

Apache、MySQL 和 PHP 都是通过服务器上特定 Linux 发行版的包管理器安装的。

Apache 是用于在 Web 服务器上提供信息服务的 Web 服务器软件。当你在浏览器中输入 URL 时,浏览器会向 Web 服务器发送一个请求,请求某些信息。然后,Web 服务器会响应你所请求的信息。Web 服务器软件正是实现这一过程的关键。

Apache 的一个流行替代品叫做 Nginx。Nginx 是一款相对较新的 Web 服务器软件,通常被认为在提供静态内容方面比 Apache 更快、更高效。当使用 Nginx 时,技术栈被称为 LEMP,代表 Linux、Nginx、MySQL 和 PHP。

默认情况下,Apache 和 Nginx 被配置为提供静态文件服务。静态文件是指不会改变的文件。静态文件的例子包括 HTML 文件、图像文件或视频文件。HTML 文件可以使用 CSS 进行样式设计,并可以使用 JavaScript 实现交互功能。

MySQL 是一种数据库软件,用于在 Web 服务器上存储有关网站的信息。例如,如果你正在运营一个在线商店,你需要存储所售产品的信息。这时就需要用到 MySQL 数据库。

PHP 是一种用于创建动态网页的编程语言。PHP 是一种服务器端语言,这意味着它在 Web 服务器上执行,并将结果发送到浏览器。在上面的在线商店示例中,PHP 用于从 MySQL 数据库中获取产品信息,并将其显示在浏览器的网页上。

Apache/Nginx 配置

当你在服务器上安装 Apache 或 Nginx 时,可以配置一些文件来改变 Web 服务器的工作方式。通常,这种配置由服务器系统管理员完成。然而,了解一个特定的配置集很有用,那就是允许单个 Web 服务器实例为多个网站提供内容的配置。

在 Apache 上,这被称为虚拟主机(virtual host),在 Nginx 上,这被称为服务器块(server block),但它们的作用相同。它们允许你配置 Web 服务器,为不同的网站提供不同的内容。

以下是 Apache 虚拟主机配置的一个示例:

Listen 80
<VirtualHost *:80>
    DocumentRoot "/www/example1"
    ServerName www.example.com
</VirtualHost>

以下是 Nginx 的相同示例:

server {
    listen 80;
    server_name www.example.com;
    root /www/example1;
}

在这两个示例中,Web 服务器都被配置为监听 80 端口上的请求,这是 HTTP 请求的默认端口。当服务器收到对域名 www.example.com 的请求时,它将提供位于目录 /www/example1 中的文件。

目录索引

默认情况下,Web 服务器被配置为查找目录索引文件。如果找到,它将提供该文件。如果找不到,它将返回 404 错误。默认的目录索引文件通常是 index.html

当 PHP 被安装并启用后,可以配置 Web 服务器查找并提供 PHP 文件作为目录索引。这通常是一个名为 index.php 的文件。

在 Apache 服务器配置中,这是通过 DirectoryIndex 指令完成的,而在 Nginx 中,这是通过 index 指令完成的。

DirectoryIndex index.php index.html
index index.php index.html;

在这两种情况下,index.php 在待查找的文件列表中都排在 index.html 之前。

大多数 LAMP 或 LEMP 网络服务器默认都会设置此配置。

因此,在上述示例中,设置了目录索引后,当您在浏览器中访问 www.example.com 时,网络服务器会在 /www/example1 目录中查找 index.php 目录索引文件并执行该文件。如果未找到 index.php,则会查找并提供 index.html 文件。如果仍未找到 index.html 文件,则会返回 404“未找到”错误。

WordPress 请求流程

当用户访问 WordPress 网站上的某个 URL 时,会发生以下过程:

  1. 浏览器向网络服务器发送请求,请求获取用户输入的 URL 所对应的数据
  2. 网络服务器接收请求,并确定应执行哪个文件来提供所请求的数据。
  3. 在 WordPress 网站中,对于前端请求,这将是根目录中的 index.php 文件;对于管理后台请求,则是 wp-admin 目录中的特定文件
  4. PHP 解释器执行 PHP 代码
  5. 如果需要,PHP 代码会与 MySQL 数据库交互,以检索所需的数据
  6. 然后 PHP 代码会输出 HTML 代码,并包含相关的 CSS 或 JavaScript
  7. 网络服务器将 HTML、CSS 和 JavaScript 代码发送回浏览器
  8. 浏览器渲染这些代码,并将页面显示给用户