前端页面请求

对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,这样即使模板文件缺失,页面的其余部分仍然可以渲染。

如何搭建自适应WordPress网站

引言

在本课中,我们将学习如何创建一个响应式网站,使其能够适应各种设备和屏幕尺寸并正确显示。响应式网页设计之所以重要,是因为访问您网站的人使用不同的浏览器,可能通过台式电脑、手机、平板电脑,甚至智能电视和智能手表来访问。超过一半的网站访问者可能会通过移动设备查看您的网站。还需要指出的是,有几十种标准屏幕尺寸,因此拥有一个响应式网站至关重要。

学习成果

今天,我们将涵盖使用响应式主题、简化导航菜单、使用移动友好表单、理解块的内在设计、利用块的可扩展性以及测试您的网站。

响应式主题

第一步是从主题仓库中找到并使用一个移动友好的主题。响应式主题是现代网页设计的关键方面,可确保在各种设备上提供最佳用户体验。这种方法意味着图像、文本和其他内容元素会自动调整其布局和比例,以适应所用设备的屏幕尺寸和分辨率,无论是台式电脑、平板电脑还是智能手机。幸运的是,大多数现代 WordPress 主题都设计为开箱即用即响应式。当您预览主题时,可以使用中等和窄显示选项来查看主题在较小屏幕上的外观。另一种选择是在您的测试网站或 WordPress Playground 上测试主题。您知道有一种简单的方法可以通过仅更新 URL 来自动在 Playground 上安装和激活主题吗?如果您添加一个问号、theme 和等号,后跟主题别名(即主题 WordPress.org URL 的最后一部分),它将自动在 Playground 上安装并激活主题,供您测试。让我们看看实际操作。如果我们查看 Frost 主题,我们会注意到别名是 frost。现在我们可以打开 WordPress Playground 并通过添加问号、theme、等号,然后是别名 frost 来更改 URL。现在,我们会注意到主题会自动安装并激活。然后,我们可以查看它在较小屏幕上的外观。最后,您还可以查看其他使用过该主题的用户评论。

简化导航

接下来,简化您的导航菜单。确保在所有屏幕上都有清晰整洁的导航至关重要。为了在较小屏幕上保持简洁的设计,避免在页眉和页脚中塞满内容。当您在模板中编辑页眉或页脚时,可以将其替换为响应式页眉或页脚模式,您可以根据需要更新这些模式。当我们编辑导航块时,可以打开设置,然后会看到汉堡菜单默认用于移动视图。汉堡菜单通过提供节省空间的极简导航解决方案来增强响应性,该解决方案可无缝适应各种设备。

移动友好表单

接下来,我们来谈谈使用移动友好表单。没有什么比在手机上费力填写表单更令人沮丧的了。确保您网站的表单是移动友好的,以提供流畅的用户体验。找到合适的插件,并使用适应不同屏幕尺寸的响应式表单设计,使用户能够轻松在任何设备上输入信息。此外,通过确保表单提供清晰的标签并支持正确的 Tab 键导航来提高可访问性。

块的可扩展性

接下来,我们来讨论 WordPress 块的内在设计。内在设计意味着编写网页布局和组件,这些布局和组件会根据内容和用户偏好动态适应可用空间,而不是仅仅关注屏幕尺寸。WordPress 支持使用块创建灵活且响应式的布局。这种方法允许您无需编写任何代码即可构建各种设计。块及其内容由于其内在特性,能够跨所有设备自适应。WordPress 块、排版和间距会根据屏幕尺寸增大或缩小。虽然在编辑器中改进响应式控制仍有工作要做,但块系统的美妙之处在于其可扩展性。有优秀的免费和第三方块插件提供精细的响应式控制,如果您想走这条路的话。您可以考虑使用诸如 Kadence Blocks、Stackable 或 Jetpack 之类的插件来增强体验,并获得更多块和设计选项。如果您愿意,甚至可以选择使用页面构建器。

测试您的网站

最后,在发布网站之前,务必在各种设备上查看并进行测试。在智能手机、平板电脑、智能电视等设备上打开网站,确保它能正确缩放。你也可以拖动浏览器窗口的边缘,手动调整屏幕尺寸,观察网站布局如何适应。此外,还可以尝试放大和缩小。在 Mac 上按 Command +,在 Windows 上按 Control + 进行放大,按 Command – 或 Control – 进行缩小,确保没有内容被隐藏或溢出。建议使用浏览器中的检查工具测试不同的断点。在大多数浏览器中,按 F12 或右键点击页面选择“检查”打开开发者工具。点击开发者工具工具栏中的设备图标(通常是手机或平板),进入响应式设计模式。拖动视口的边缘手动调整屏幕尺寸,观察网站布局如何调整。

结论

总之,创建响应式网站是提升用户体验和覆盖更广泛受众的关键部分。

固定链接,在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. 浏览器渲染这些代码,并将页面显示给用户

管理WordPress多站点网络

管理 WordPress 多站点网络与管理单站点 WordPress 安装略有不同。

在本课中,你将学习如何管理 WordPress 多站点网络。你将了解网络管理仪表板、网络设置页面中的可用选项,以及在网络中创建和管理子站点的不同方法。

网络管理仪表板

一旦启用了多站点网络,你的管理员用户将变为超级管理员,并可以访问网络管理仪表板。在这里,你可以管理网络中的站点、用户、主题、插件和设置。

网络设置页面

网络设置页面是管理多站点网络的地方。操作设置允许你设置网络标题和管理员邮箱。注册设置允许你设置网络的注册选项。例如,如果你想允许用户在网络中注册新站点,可以启用“站点和用户账户均可注册”选项。你还可以设置新站点的禁用名称、限制特定邮箱域名的注册,以及禁止特定邮箱域名的注册。新站点设置控制创建新站点时发送的邮件和创建的内容。上传设置控制文件上传,包括文件大小限制和允许的文件类型。语言设置允许你控制网络中新建站点的默认语言。最后,菜单设置允许你控制哪些菜单对站点管理员可用。

创建站点

你可能想做的第一件事就是创建一个子站点。为此,请转到站点页面,然后点击“添加新”按钮。系统会要求你输入站点地址(子域名或子目录)、站点标题、站点语言和站点管理员邮箱地址。如果你使用已有用户的邮箱地址,该用户将被添加为站点管理员。否则,将创建一个新用户并成为新站点的管理员。

站点创建后,你可以通过点击站点列表中的“编辑”按钮来编辑该站点。信息选项卡管理站点地址,显示站点的注册和最后更新时间,并管理站点属性。用户选项卡允许你将现有用户添加到站点,或向站点添加新用户。主题选项卡允许你为站点激活一个主题。此处可用的主题是未在整个网络中激活的主题。这意味着你可以为网络中的特定站点设置专属主题。设置选项卡包含你可以管理的所有其他站点设置。

为站点分配顶级域名

还可以为网络中的站点设置顶级域名或根域名。如果你或站点管理员希望为网络中的站点使用不同的域名,这会非常有用。

要实现这一点,你需要在域名注册商处注册该域名,并将其指向与多站点安装相同的位置。在这种情况下,你可以看到新的顶级域名指向与多站点安装相同的位置,因为它会重定向到多站点的 URL。然后,在网络管理中,编辑相关站点,并将站点地址字段更改为新的顶级域名。现在,当你浏览该域名时,将被重定向到网络中的关联站点。

允许用户注册自己的站点

根据你计划如何使用多站点网络,你可能希望用户能够注册自己的子站点。为此,请转到网络设置页面,并启用“站点和用户账户均可注册”选项。现在,如果用户浏览默认的 WordPress 注册 URL,他们将看到同时注册网络站点的选项。

https://multipress.test/wp-login.php?action=register

输入用户名和邮箱地址后,系统会询问他们是希望创建站点,还是仅注册网络用户账户。如果他们选择创建站点,则需要设置站点名称和标题。点击注册后,站点将被创建,用户将收到一封激活新站点的邮件,之后他们就可以登录到该子站点。

进一步阅读

有关管理多站点网络的更多详细信息,请查看 WordPress 开发者文档中的网络管理和网络管理设置页面。

什么是WordPress多站点?

简介

在本课中,我们将探索 WordPress 多站点网络的世界。这是一个强大的功能,允许您通过一次安装管理多个 WordPress 站点。如果您曾经想运行多个站点,却不想在多个登录页面之间切换,那么这就是您的解决方案。本课的学习成果是理解什么是多站点网络以及为什么您可能想要使用它,其次我们还将重点介绍其优势和使用场景。

什么是 WordPress 多站点网络?

但什么是 WordPress 多站点网络?WordPress 多站点网络本质上是一个 WordPress 站点的集合,所有这些站点都运行在同一个 WordPress 安装上。这意味着网络管理员可以通过一个登录账号管理多个站点。虽然每个站点(称为子站点)可以拥有自己的外观、风格和内容,但它们共享相同的主题和插件。每个子站点都有独立的媒体目录和数据库表,使它们彼此独立,即使它们使用相同的核心文件。请注意,如果您需要网站之间紧密连接并共享大量信息,多站点网络可能不是最佳选择。多站点网络中的每个站点都是独立运行的。

为什么要使用 WordPress 多站点网络?

当您有多个相关但必须保持独立的网站时,多站点网络是理想的选择。例如,如果您经营一家拥有多个分店的连锁店,每个分店可能需要自己的网站来展示其特定信息。然而,所有这些网站都共享相似的功能,例如相同的设计或功能。使用多站点网络,您可以从一个中央仪表板管理所有这些网站,从而更轻松地一次性更新所有站点的主题、插件和核心文件。多站点网络还提供强大的用户管理功能,允许您在整个网络中分配不同的角色和权限。在这个例子中,我选择了我的一个子站点,您会注意到,我已经添加了一个名为 John 的用户,在其下方,我可以向此子站点添加现有用户或新用户。其他适合使用多站点网络的例子包括:以多种语言运行同一个网站、媒体公司在一个网络下管理区域性新闻网站,或者大学为每个院系提供自己的网站。

多站点网络的类型

WordPress 多站点网络可以通过两种方式设置:子目录和子域名。子目录作为主域名的一部分出现,例如,格式为 yourdomain.com/support。URL 将以子目录的名称结尾。子域名是主域名下的独立域名或站点。它们作为主域名的前缀出现,结构如下例所示:support.yourdomain.com。子目录适合在网站的不同部分维护统一的域名和一致的用户体验。而子域名则适合在主域名下创建不同的、独立的版块或完全不同的网站。

超级管理员与站点管理员

接下来,区分超级管理员和站点管理员也至关重要。超级管理员或网络管理员管理整个站点网络。他们可以激活多站点网络、更新网络设置以及安装主题和插件。他们还可以授予创建新站点和用户帐户的权限。站点管理员管理网络内的单个站点。他们可以向其分配的站点添加用户,但不能安装或管理主题和插件。但是,根据超级管理员授予的权限,他们可以激活或停用现有的主题和插件。

总结

在下一课中,我们将学习如何管理多站点网络。但如果您想了解如何创建或设置多站点网络,请查看“设置 WordPress 多站点网络”这一课,它是初级开发者学习路径的一部分。

使用创建块主题插件进行导出和主题变体

介绍

在本课中,你将学习如何使用创建块主题插件来保存和导出设计变体。如果你想探索该插件提供的更高级选项,请查看创建块主题插件课程,该课程是中级主题开发者学习路径的一部分。以下是本课的学习目标。为什么需要导出你的主题自定义设置?如何创建你自己的自定义 WordPress 主题?使用创建块主题插件将修改后的主题作为 zip 文件安装,并在另一个网站上安装和使用该自定义主题。

创建块主题

一旦你在网站上安装并激活了一个主题,你可能想要进行一些更改,例如调整颜色和布局以匹配你的品牌或个人偏好。默认情况下,这些更改会作为数据库条目存储。它们不会集成到主题文件中。但是,如果你正在一个测试网站上工作,并希望将你创建的设计转移到另一个网站,你需要将其保存为主题的一部分。这就是创建块主题插件发挥作用的地方。它允许你将你的自定义设置转换为原始主题的永久变体,并将修改后的主题导出为 zip 文件,从而有效地创建你自己的自定义主题。然后,你可以在其他 WordPress 网站上使用它,而无需重新设计相同的元素。这种方法特别重要,因为它可以避免在更新主题时覆盖你的自定义设置。最后,它还可以作为你更新后设计的备份。让我们前往插件页面,搜索创建块主题插件。安装并激活该插件后,你可以转到外观并选择创建块主题。在这里,你会看到几个选项。你可以将当前主题导出为 zip 文件,创建一个新的空白主题,克隆当前主题,或创建一个子主题。

自定义设置

接下来,让我们讨论自定义你网站上的当前主题。你可以在不编写代码的情况下自定义主题的各个方面。这包括调整全局样式,如排版、颜色和间距,以及修改主题模板和模板部分,如页眉和页脚。你还可以创建自定义块样式、设计块模式,以及管理网站布局选项,包括网站宽度和对齐方式。对于这个示例,让我们进行一些自定义设置来实际看看效果。那么,让我们前往外观并打开站点编辑器。然后我们可以继续打开样式,前往颜色,因为我想为我的网站创建一个自定义颜色。然后我可以点击调色板,点击自定义旁边的加号,然后创建我的自定义颜色。完成后,我会给它起一个合适的名称,然后点击完成。现在,我可以返回元素,将我的文本和标题颜色更改为我的自定义颜色。接下来,我将打开我的样式手册,点击设计,然后更新我的按钮块。首先,我会更改背景颜色,然后将文本颜色更改为我的自定义颜色,向下滚动,添加一个像素的边框,并将边框颜色也更改为我的自定义颜色。然后我会继续点击保存。最后一个示例,我将自定义我的一个模板。在这种情况下,是 404 模板,当然,这是当找不到页面时显示的页面。我会添加一张手拿指南针的图片,表示一个人正在寻找方向。

将更改保存到主题文件

现在我们已经完成了自定义设置,我们可以点击小扳手或创建块主题扳手,然后选择将更改保存到主题,接着保存我们所做的所有更改。选择将更改保存到主题后,你会注意到一些变化。例如,我添加的自定义颜色现在列在主题下方,因为它已被添加到 theme.json 文件中。提醒一下,theme.json 是一个配置文件,用于定义 WordPress 主题的全局设置和样式。换句话说,我的更改现在已成为主题文件的一部分。让我们看另一个示例,看看 404 模板的主题文件是如何变化的。我们可以前往主题文件编辑器,点击模板,然后选择 404.html。在这里,我们会注意到我们添加的图片现在已成为主题文件的一部分。所以如前所述,创建块主题插件允许我们将自定义设置转换为原始主题的永久变体。

重命名主题并导出 zip 文件

下一步是重命名我们的主题,为此,我们将点击创建一个新的空白主题。然后,我们可以给它起一个合适的名称,在这个例子中,是海洋蓝,并添加主题描述和主题作者。我们现在可以继续自定义我们的主题,当我们准备好导出修改后的主题时,我们可以再次点击小扳手,然后选择导出 Zip。一旦 zip 文件下载到你的设备,你就可以将其导入到另一个在线或测试网站。例如,要将其导入到在线网站,我们可以点击外观,选择主题,点击添加新主题,然后在顶部选择上传主题。然后,我们可以从设备中选择 zip 文件。点击现在安装,然后激活。然后我们就可以开始使用我们的新主题了。

结论

祝你导出和使用创建块主题插件顺利。

充分利用字体库

介绍

在本课程中,你将了解字体库并学习如何充分利用它。学习目标是访问和使用字体库,并考虑字体系列搭配和易读性。WordPress 6.5 带来的一项出色新功能是能够访问和使用字体库。这个工具简化了你网站上的字体管理,允许你安装、使用和移除自定义字体。可以把它想象成字体的媒体库。就像你可以向媒体库添加和上传照片一样,现在你也可以对字体进行同样的操作。任何已安装的字体,无论是由你还是主题分发者安装的,都可以在编辑时选择。

字体库

要开始使用,请点击网站编辑器右上角的全局样式图标,选择排版,然后点击管理字体。在库下方,你将看到已安装的字体以及主题中定义的字体。如果你想从电脑上传许可的网络字体,请点击上传,然后选择文件。如果你无法安装字体,可能是由于托管服务提供商的限制。请联系你的主机商并请求启用字体安装,或者考虑切换到更灵活的托管方案。要从 Google Fonts 安装字体,请点击安装字体标签。首次操作时,你需要允许 WordPress 连接到 Google 服务器。你可以随时撤销访问权限。当你点击三个垂直点时,只需点击撤销对 Google Fonts 的访问权限即可。

本地托管

你安装的字体将从 Google 下载并存储在你的网站上。这意味着它是本地托管的。本地托管的字体能让你的网站更快,并保护访客的隐私。让我进一步解释一下。如果你的字体是本地托管的,网站访客无需连接到 Google 的服务器即可访问这些文件。因此,你可以最大限度地减少加载时间,并避免将用户数据发送给 Google。这确保了符合数据保护法规。如果你知道要使用的字体名称,可以直接搜索。在这个例子中,是 Merriweather。你还可以按类别筛选以显示特定的字体样式。当你选择一种字体时,你会注意到单个变体或多个变体。因此,字体库提供了对不同字重和样式的精细控制,鼓励你注意安装和启用了哪些字体变体。

搭配字体系列

接下来,我们来讨论搭配字体系列。字体系列是一组具有共同设计特征的相关字体。例如,像 Georgia Pro 或 Times New Roman 这样的衬线字体在字母末端有小的线条或装饰,赋予它们经典正式的外观。另一方面,像 Ariel 或 Helvetica 这样的无衬线字体缺少这些装饰,提供了干净、现代的美感。虽然使用多种字体来让你的设计脱颖而出可能很诱人,但混合太多字体会造成杂乱、不一致的外观,并减慢加载速度。最好坚持使用两种灵活、高质量的字体系列,以保持和谐、专业的设计并确保快速加载。常见的做法是使用一种字体用于标题,另一种用于正文,并对引用或标注等特殊元素应用不同的样式。这种方法能让你的设计保持连贯性。

字体搭配示例

让我们看一个例子。我决定使用一种衬线字体和一种无衬线字体,它们相互补充。对于标题,我选择了 Merriweather,正文则使用 Ubuntu Sans。Merriweather 以其经典而精致的风格吸引注意力,Ubuntu Sans 则使正文既醒目又易于阅读。将拉引文设置为浅色、斜体字重和样式,以独特的触感突出特殊文本,而无需加载第三种字体系列。这种搭配创造了一个统一而有效的设计,平衡了冲击力和可读性。最后,我们来谈谈易读性。你还需要确保选择的字体呈现的文本是清晰易读的。这种可读性的视觉方面意味着你网站上的文本内容清晰明了。字母要清晰且设计良好。字体大小要足够大,颜色与背景色要有足够的对比度。

结论

避免使用过于装饰性的字体,通常是手写体,这些字体可能难以阅读,无论是对你自己、视障人士,还是对母语不同的访客来说。总之,易于阅读的字体应该始终是你设计决策中的首要任务。