分类: 学习

  • 如何使用Adminer通过单个PHP文件轻松管理数据库

    如何使用Adminer通过单个PHP文件轻松管理数据库

    管理MySQL数据库是成为专业WordPress开发人员的基本要求之一。Adminer极大地简化了该任务。

    每个WordPress站点都需要一个数据库才能运行——它是WordPress存储所有站点关键数据的地方。虽然phpMyAdmin多年来一直是MySQL/MariaDB数据库管理的主要工具,但 Adminer 是一个很好的选择。它加载了大量有用的功能和更漂亮的用户界面,所有这些都在一个轻量级的PHP文件中,您可以在您的服务器上快速部署。

    在这篇文章中,您将了解Adminer、它比phpMyAdmin提供的许多好处,以及如何使用它来管理您的数据库。

    1. 什么是Adminer?
    2. 如何使用Adminer
    3. Adminer功能
    4. Adminer插件
    5. Adminer主题
    6. Adminer vs phpMyAdmin
    7. 如何在WordPress中使用Adminer

    什么是Adminer?

    Adminer(以前称为phpMinAdmin)是一个基于PHP的免费开源数据库管理工具。在您的服务器上部署非常简单。要使用它,您所要做的就是上传它的单个PHP文件,将浏览器指向它,然后登录。

    如何使用Adminer通过单个PHP文件轻松管理数据库

    Adminer登录页面

    phpMyAdmin仅支持管理MySQLMariaDB数据库不同,Adminer还支持管理其他数据库,如PostgreSQLSQLiteMS SQLOracleSimpleDBElasticsearchMongoDBFirebird。它还提供43种语言版本。

    Adminer提供易于使用的界面,更好地支持许多MySQL功能,更卓越的性能和更高的安全性。

    现在让我们探索如何安装Adminer。

    如何使用Adminer

    但在开始安装之前,以下是让Adminer在您的服务器上工作的一些基本要求:

    • 安装PHP 5、7 或8
    • 一个数据库驱动程序(例如MySQL、PostgreSQL等)

    差不多就是这样!

    从他们的官方网站下载最新版本的Adminer。您还可以在那里找到仅MySQL和仅英语版本的Adminer。如果您正在管理MySQL或MariaDB数据库(例如用于 WordPress 站点),您可以获得这些较轻的变体。

    下载Adminer的最新版本

    下载Adminer的最新版本

    或者,如果您使用的是终端,则可以使用curl命令将其直接下载到您的目录中。

    curl -o https://github.com/vrana/adminer/releases/download/v4.7.8/adminer-4.7.8.php
    curl -o https://github.com/vrana/adminer/releases/download/v4.7.8/adminer-4.7.8.php
    curl -o https://github.com/vrana/adminer/releases/download/v4.7.8/adminer-4.7.8.php

    Adminer 4.7.8是最新的稳定版本。它增加了对刚刚发布的PHP 8.0的支持。如果有新版本可用,您可以在上述代码的下载URL中更改管理员的版本号。

    下载后,您可以将此.php文件放在服务器上的任何位置,例如其根文件夹。但是,将所有第三方工具放在单独的目录(例如vendorassets等)中是一种很好的做法。

    您现在已经在您的服务器上安装了Adminer。它的即插即用设计意味着Adminer几乎可以在任何服务器上运行。

    如何访问Adminer

    要访问它,您需要做的就是通过浏览器访问其链接。

    例如,如果您将其放在网站的根目录中,则可以通过访问https://your-website.com/adminer-4.7.8.php来访问它。如果您没有设置域名,您也可以通过您服务器的IP地址或本地主机环境访问它。

    使用或不使用数据库名称登录Adminer

    使用或不使用数据库名称登录Adminer

    从这里,您可以登录到安装在服务器上的任何数据库。您也可以将数据库字段留空。Adminer将在下一个屏幕上向您显示所有数据库的列表。

    勾选Permanent login选项将节省您的登录信息,所以你可以很容易地在以后通过在侧栏的链接重温这段会话。

    如果不指定,Adminer会列出所有数据库

    如果不指定,Adminer会列出所有数据库

    Adminer功能

    Adminer包括许多功能,使数据库管理更加轻松。是时候深入了解它们了。

    1. 连接到数据库服务器
    2. 创建新数据库
    3. 更改数据库名称和排序规则类型
    4. 探索数据库架构
    5. 检查表数据和结构
    6. 更改表和列设置
    7. 插入新记录并更新现有记录
    8. 在所有表中搜索数据
    9. 截断、删除、移动和复制表
    10. 创建表、视图、例程和事件
    11. 导入或导出数据库
    12. 执行SQL查询
    13. 显示和创建权限(用户)
    14. 广泛的定制选项

    连接到数据库服务器

    如前所述,您可以连接到Adminer支持的任何数据库服务器。对于MySQL数据库服务器,默认用户名是root,默认密码是空字符串。您还可以在此处选择要管理的现有数据库。

    使用Adminer管理WordPress数据库

    使用Adminer管理WordPress数据库

    创建新数据库

    您可以单击Create database链接来创建新的MySQL数据库。输入数据库名称并选择其归类类型。对于WordPress数据库,推荐的整理类型是utf8mb4_unicode_ci

    在Adminer中创建新数据库

    在Adminer中创建新数据库

    创建数据库后,您可以更改它的各个方面,例如数据库的名称、架构、用户和表。

    设置数据库名称和排序规则类型以创建数据库

    设置数据库名称和排序规则类型以创建数据库

    您现在已经创建了一个新的MySQL数据库。下一页将向您展示用表、列等填充它的更多选项。

    找到下拉菜单和标题中列出的新数据库

    找到下拉菜单和标题中列出的新数据库

    更改数据库名称和排序规则类型

    单击“Alter database”链接将允许您更改其名称和归类类型。如果您刚刚创建了一个数据库并输入了错误,这将非常方便。

    使用管理员的“Alter database”选项轻松编辑数据库

    使用管理员的“Alter database”选项轻松编辑数据库

    例如,我将数据库的整理类型从utf8_unicode_ci 更改utf8mb4_unicode_ci

    在Adminer中更改数据库

    在Adminer中更改数据库

    注意:如果您的数据库已被任何应用程序使用,请确保您在此处所做的更改也反映在您的应用程序代码中。

    检索数据库Schema

    数据库模式是指定义所有数据库元素如何关联的逻辑配置。在MySQL中,Schema是数据库的同义词。所以,他们指的是同一件事。

    但是,在PostgreSQL和Oracle等其他数据库中,Schema是指表的集合。它只是数据库的一部分。

    WordPress使用MySQL作为其数据库。因此,它的Schema本质上是它的表及其列。Adminer甚至允许您在Schema框周围移动并根据需要使用它们。

    在Adminer中检索WordPress数据库Schema

    在Adminer中检索WordPress数据库Schema

    这是了解典型 WordPress 数据库结构的来龙去脉的好方法。

    检查表数据和结构

    单击任何表格将显示有关它的更多详细信息。默认情况下,Adminer会将您定向到表的Show structure选项卡。在这里,您将找到有关表列的信息,例如它们的名称、类型和索引。

    单击表格将显示其“结构”

    单击表格将显示其“结构”

    如果您的数据库表有任何关联的外键或触发器,它们也会列在此处的最底部。

    上面的示例显示了有关wp_options表的详细信息。这是WordPress存储其所有重要设置的地方。接下来,您可以转到“Select data”选项卡以查看存储在此表中的所有值。

    查看按列列出的所有表数据

    查看按列列出的所有表数据

    正如您所看到的,这里的用户界面比phpMyAdmin中的用户界面要容易得多。

    更改表和列设置

    单击顶部的Alter table链接以更改表和列设置。

    通过Adminer轻松更改数据库表和列

    通过Adminer轻松更改数据库表和列

    对于表,您可以更改其名称、引擎和归类类型。在底部,您还可以找到用于设置表的默认值以启动自动增量的选项,以及是否可以使用默认值和注释设置其列。

    对于列,您可以更改它们的名称、类型、长度和排序规则类型。

    您还可以通过单击+x按钮来添加或删除列。Drop按钮将完全删除数据库中的表,所以请谨慎使用。

    完成更改后,不要忘记点击“Save”按钮。

    插入新记录并更新现有记录

    点击New item链接转到Insert: <table_name>选项卡。

    在数据库表的列中插入新记录

    在数据库表的列中插入新记录

    在这里,您可以向表中添加新行。管理员列出了列名称及其类型,以便您可以快速输入它们。您还可以为您输入的值运行散列函数以自动加密它们。如果数据是敏感的,例如密码,这将非常有用。例如,WordPress使用MD5算法将其密码存储在数据库中。

    编辑现有记录同样简单。例如,如果您想更改站点的描述,您可以在wp_options表中编辑blogdescription选项的值。

    在Adminer中编辑现有数据库记录

    在Adminer中编辑现有数据库记录

    接下来,在option_value字段中输入您的新博客描述,然后单击SAVE按钮以使您的更改生效。

    通过Adminer更改WordPress站点的描述

    通过Adminer更改WordPress站点的描述

    在所有表中搜索数据

    Adminer允许您一次在数据库的所有表中搜索任何数据。它会向您显示最有可能保存此值的表。

    在Adminer中的数据库中搜索术语

    在Adminer中的数据库中搜索术语

    当我搜索词home时,Adminer将wp_options表作为最有可能的候选者。单击它会向我显示Adminer在数据库中找到它的确切列和行。

    单击搜索结果下方列出的表格将显示有关它的更多详细信息。从这里,您可以在此表中执行更精细的搜索

    在建议的表格中深入搜索

    在建议的表格中深入搜索

    例如,我可以编辑home选项名称的值并更改我网站的主页URL。

    清空、删除、移动和复制表

    Adminer允许您直接从数据库的仪表板对表执行许多操作。

    轻松对表执行SQL操作

    轻松对表执行SQL操作

    您可以通过选择表并单击下面的按钮对表执行许多SQL查询。

    例如,如果您想清空您网站上的所有评论,您可以选择wp_comments表并点击Truncate按钮。它会清空表中的所有行,但仍会保留现有的列结构。点击Drop按钮将完全删除表格。

    从这里,您还可以将表MoveCopy到另一个数据库。使用Overwrite选项,这是一种将站点数据(例如帖子和评论)从一个站点传输到另一个站点的快速而肮脏的方式。

    创建表、视图、例程和事件

    您可以使用Adminer创建新表、视图、例程和事件。

    使用Adminer创建新表很简单

    使用Adminer创建新表很简单

    Create table功能允许您定义表的完整模式,包括它的列和嵌套值。

    高级用户可以使用Adminer的其他高级功能来定义MySQL视图、过程、函数和事件。

    使用Adminer轻松创建许多其他SQL功能

  • 如何在不同操作系统上安装phpMyAdmin

    如何在不同操作系统上安装phpMyAdmin

    管理数据库是运行网站的一个复杂但必要的部分。幸运的是,有像phpMyAdmin这样的软件可以让这个过程变得更容易。这种流行的管理工具似乎很难学习,但是一旦掌握了它,访问和修改数据库将变得轻而易举。

    最困难的部分是知道如何安装phpMyAdmin并在您的Web服务器上进行设置。如果你遇到了麻烦,你肯定不是唯一一个。

    在本文中,我们将逐步向您展示如何在所有主要操作系统上安装phpMyAdmin,以及如何配置它。

    1. 什么是phpMyAdmin?
    2. phpMyAdmin要求
    3. 安装phpMyAdmin
    4. 如何访问phpMyAdmin
    5. 配置phpMyAdmin
    6. Adminer:一个更简单的phpMyAdmin替代方案

    什么是phpMyAdmin?

    每个网站背后都有一个数据库。该数据库允许您存储从用户帐户信息到您在网站上发布的帖子的数据。虽然有许多数据库服务,但MySQL是最受欢迎的一种。并且最有可能的是您的网站正在使用的那个。MariaDB是一种常见的替代方案。

    直接与MySQL交互可能会很复杂且令人困惑,尤其是当您不熟悉网站管理时。但是与数据库交互通常是站点维护的必要部分。

    phpMyAdmi旨在为MySQL带来一个基于浏览器的可视化界面,并让您更轻松地使用您的数据库。由于其受欢迎程度,许多网络托管服务包括访问phpMyAdmin。

    为什么需要phpMyAdmin?

    如果没有像phpMyAdmin这样的工具,您访问数据库的唯一选择就是使用命令行。这意味着您没有可视化界面——只有一个文本提示,您可以在其中输入命令。这样做可能会令人困惑,甚至可能导致意外破坏您的网站。

    phpMyAdmin是免费和开源的。广泛的网络主机支持它,您甚至可以自己安装,而无需支付一分钱。一旦您安装了它,从可视化界面执行数据库命令就会更加直观。

    您可以自己尝试phpMyAdmin,看看它是否是您想要使用的数据库管理器。一旦您试驾并决定喜欢它,您就可以在您的服务器上安装该工具。

    phpMyAdmin要求

    幸运的是,安装phpMyAdmin的要求相对简单。如果您有任何类型的Web服务器,您几乎肯定可以让它运行。以下是详细要求:

    • 任何类型的网络服务器
    • MySQL或MariaDB 5.5或更新版本
    • 支持Javascript、cookies和Bootstrap 4.5(访问phpMyAdmin)的网络浏览器
    • PHP 7.2.5或更高版本
    • 其他PHP要求:会话和SPL扩展、哈希、ctype和JSON支持。其他扩展如mbstring可以提高性能或添加额外的次要功能(完整列表请参见需求页面)。

    phpMyAdmin系统要求

    phpMyAdmin系统要求

    在您尝试安装phpMyAdmin之前,请记住许多Web主机已经安装了它。

    在安装phpMyAdmin之前,请检查您的网络主机的文档以确保他们尚未安装它。

    安装phpMyAdmin

    一旦您检查以确保您的服务器支持phpMyAdmin,就可以开始安装它了。Web服务器有多种操作系统,因此我们包含了所有最流行的操作系统,包括Windows、Mac和多个Linux发行版。

    有了这个,这里是安装phpMyAdmin的分步说明。

    如何在Windows 10上安装phpMyAdmin

    根据要求,您将需要一个带有PHP的Web服务器和一个数据库才能使用phpMyAdmin。虽然您无疑可以手动下载Apache、PHP和MySQL,但还有一个更简单的选择,可以在Windows计算机上启动和运行服务器。

    WAMP(Windows、Apache、MySQL和PHP)是免费软件,可让您轻松创建具有所有先决条件的服务器。如果XAMPP for Windows(Apache、MariaDB、PHP 和 Perl)更适合您的需求,您也可以尝试它。

    WAMPserver的主页

    WAMPserver的主页

    下载其中之一后,只需安装它并完成设置过程即可。

    假设您使用的是WAMP或XAMPP。这两个都已经与phpMyAdmin一起提供了!在您的浏览器中,导航到http://localhost/phpMyAdmin您应该会看到登录屏幕,确认您已正确安装所有内容。

    如何在Mac上安装phpMyAdmin

    在Mac上获取phpMyAdmin有点不同。所有的先决条件都是一样的。但由于macOS附带Apache和PHP,因此您无需下载它们。

    对于Mac,您有两个选择:您可以像使用其他操作系统一样使用XAMPP或手动安装所有内容。

    XAMPP OSX下载列表

    XAMPP OSX下载列表

    下载适用于OS X的XAMPP,打开它,然后将其放入您的应用程序文件夹中。

    打开XAMPP Control/Applications/XAMPP/manager-osx.app以启动Apache和MySQL服务器。如果您随后访问http://localhost,您应该会发现一切正常,并且您的phpMyAdmin登录信息位于“工具”部分。

    如果您改为手动安装phpMyAdmin,则该过程很简单。由于您已经拥有Apache和PHP,因此您只需要下载MySQL。确保从下拉列表中选择macOS。下载并安装该文件,按照说明进行操作,并记录提供给您的所有用户名和密码。

    然后您可以打开系统偏好设置并启动MySQL以启动服务器。您还可以通过在终端中运行以下命令来启动Apache:

    sudo apachectl start
    sudo apachectl start
    sudo apachectl start

    在Mac终端中启动Apache的命令

    在Mac终端中启动Apache的命令

    有了这个,剩下的就是安装phpMyAdmin。将文件夹重命名为“phpMyAdmin”并将其移动到 /Library/WebServer/Documents/。通过在浏览器中访问http://localhost/phpMyAdmin检查以确保它已正确安装。

    如果您安装了Homebrew,另一个选项是输入命令:brew install phpMyAdmin

    如何在Ubuntu上安装phpMyAdmin

    作为最受欢迎和最容易使用的Linux发行版之一,Ubuntu是您服务器的不错选择。

    虽然总是可以手动安装Apache和MySQL,但Linux有自己的标准服务器软件“堆栈”,称为LAMP(Linux、Apache、MySQL和PHP)。与WAMP和XAMPP不同,它不随phpMyAdmin一起提供,因此您需要手动安装它。幸运的是,Ubuntu允许您通过命令行进行所有安装。

    首先,检查是否启用了tasksel。Ubuntu的服务器版本应该安装它,但如果你有桌面版本,你可以使用以下命令启用它:

    sudo apt-get install tasksel
    sudo apt-get install tasksel
    sudo apt-get install tasksel

    之后,您可以使用tasksel使用以下命令安装LAMP服务器:

    sudo tasksel install lamp-server
    sudo tasksel install lamp-server
    sudo tasksel install lamp-server

    在Ubuntu中通过命令行安装LAMP服务器

    在Ubuntu中通过命令行安装LAMP服务器

    现在,您可以安装phpMyAdmin:

    sudo apt install phpMyAdmin
    sudo apt install phpMyAdmin
    sudo apt install phpMyAdmin

    有了它,您就拥有了在计算机上运行服务器所需的所有文件。

    如何在CentOS 7上安装phpMyAdmin

    在CentOS 7上安装phpMyAdmin与其他发行版非常相似,但命令略有不同,因为该操作系统使用Yum而不是典型的apt命令。

    也没有简单的LAMP堆栈可以一次性安装您需要的所有服务器组件,因此您需要手动下载Apache、MySQL和PHP。幸运的是,这些可以通过命令行轻松获得。

    首先,让我们使用命令行下载LAMP堆栈,从Apache开始:

    sudo yum install httpd.service
    sudo yum install httpd.service
    sudo yum install httpd.service

    要启动Apache服务器并确保它在引导时运行,请使用以下命令:

    sudo systemctl start httpd.service
    sudo systemctl enable httpd.service
    sudo systemctl start httpd.service
    sudo systemctl enable httpd.service
    sudo systemctl start httpd.service
    sudo systemctl enable httpd.service

    现在是安装数据库的时候了。CentOS 7默认安装MariaDB。它还与phpMyAdmin完全兼容,因此使用起来很安全。虽然可以改为下载MySQL,但这是一个复杂得多的过程。让我们使用MariaDB:

    sudo yum install mariadb-server mariadb
    sudo yum install mariadb-server mariadb
    sudo yum install mariadb-server mariadb

    现在我们可以运行它并使其在启动时启动:

    sudo systemctl start mariadb
    sudo systemctl enable mariadb.service
    sudo systemctl start mariadb
    sudo systemctl enable mariadb.service
    sudo systemctl start mariadb
    sudo systemctl enable mariadb.service

    要完成MariaDB的安装并确保其安全,请使用以下命令运行安全安装设置。

    sudo mysql_secure_installation
    sudo mysql_secure_installation
    sudo mysql_secure_installation

    最后,我们可以使用附加的MySQL包安装PHP。

    sudo yum install php php-mysql
    sudo yum install php php-mysql
    sudo yum install php php-mysql

    您还需要重新启动Apache服务器,以便它与PHP一起正常工作。

    sudo systemctl restart httpd.service
    sudo systemctl restart httpd.service
    sudo systemctl restart httpd.service

    这样,您就拥有了所需的LAMP堆栈,并最终可以下载phpMyAdmin。由于它不在Yum存储库中,因此您需要使用以下命令安装EPEL存储库:

    sudo yum install epel-release
    sudo yum install epel-release
    sudo yum install epel-release

    并安装phpMyAdmin。

    sudo yum install phpMyAdmin
    sudo yum install phpMyAdmin
    sudo yum install phpMyAdmin

    在CentOS 7上还需要几个步骤,但您现在应该有一个准备好配置的服务器。

    如何在Debian上安装phpMyAdmin

    与CentOS 7非常相似,您需要使用命令行手动安装LAMP堆栈。首先,让我们使用以下命令获取Apache:

    sudo apt install apache2
    sudo apt install apache2
    sudo apt install apache2

    接下来,我们将安装MariaDB。与CentOS 7一样,此Linux发行版与MariaDB配合使用效果更好,我们建议您改用该发行版。

    sudo apt install mariadb-server
    sudo apt install mariadb-server
    sudo apt install mariadb-server

    和CentOS 7一样,您应该运行安全安装来添加数据库密码并确保一切都是安全的。

    sudo mysql_secure_installation
    sudo mysql_secure_installation
    sudo mysql_secure_installation

    最后,我们可以安装PHP和一些您的服务器需要运行的额外包。

    sudo apt install php php-mysql libapache2-mod-php
    sudo apt install php php-mysql libapache2-mod-php
    sudo apt install php php-mysql libapache2-mod-php

    我们可以通过安装phpMyAdmin来完成。

    sudo apt install phpMyAdmin
    sudo apt install phpMyAdmin
    sudo apt install phpMyAdmin

    如何访问phpMyAdmin

    一旦正确安装了phpMyAdmin,在任何操作系统上访问和登录都是一样的。

    您将需要您的网络服务器地址,然后附加/phpMyAdmin/到它的末尾。如果您只是在计算机上设置了服务器,则地址很可能只是“localhost”,因此请访问此链接:

    http://localhost/phpMyAdmin
    http://localhost/phpMyAdmin
    http://localhost/phpMyAdmin

    如果这是您已经在网络上运行的服务器,它也可能是一个IP,甚至是一个命名地址。如果您不确定,您可能会在Apache或MySQL配置文件中找到该地址。

    进入登录屏幕后,您将需要用户名和密码。如果这是全新安装,用户名可能是“root”,您可以将密码留空。如果这不起作用,密码可能是“password”。

    phpMyAdmin登录屏幕

    phpMyAdmin登录屏幕

    如果您无法登录,请检查phpMyAdmin或MySQL配置文件以查找您的登录信息。您可能还在安装过程中更改了登录信息。

    如果Linux用户在访问页面或登录时遇到问题,应尝试以下命令:

    sudo dpkg-reconfigure phpMyAdmin
    sudo dpkg-reconfigure phpMyAdmin
    sudo dpkg-reconfigure phpMyAdmin

    最后,您应该注意,如果您使用的是预装了phpMyAdmin的网络主机,您通常可以在您的主机仪表板中找到登录信息和链接。在这种情况下,您不需要在服务器上手动安装phpMyAdmin。

    配置phpMyAdmin

    安装数据库管理器并准备好在您的系统上运行后,您应该知道如何配置phpMyAdmin。与任何服务器软件一样,您肯定会想要对设置进行大量修改。

    未配置的phpMyAdmin也可能带来潜在的安全风险。您需要采取一些额外的步骤来锁定您的系统。

    如果您需要恢复数据库的备份,您可以随时使用phpMyAdmin导入新的SQL文件。在对数据库或其设置进行任何重大修改之前,请务必经常进行备份,尤其是当您不只是在测试服务器上工作时。

    如何运行SQL查询

    现在您已经使用了phpMyAdmin,您应该知道如何执行它的用途:运行SQL查询。

    您可以在主页上运行查询(这将适用于整个站点),也可以在特定的数据库或表中运行。单击屏幕顶部的SQL选项卡,输入您的命令,然后按Go

    在phpMyAdmin中运行SQL查询

    在phpMyAdmin中运行SQL查询

    以下是常见SQL查询的列表:

    • Select:最重要的标签,几乎在每个查询的开头使用。
    • Create Table:创建一个新表。
    • Alter Table:添加新列。
    • Insert:添加新行。
    • Delete:删除列。
    • Update:编辑表中的值。
    • Sum():将所有值相加。
    • Avg():取平均值。
    • Count():计算填充的列数。
    • Round():将值四舍五入为您设置的整数。
    • Max():返回最大值。
    • Min():返回最小值。
    • Between:选择特定范围内的列。
    • Group By:按数据对表格进行分组。
    • Order By:以某种方式排序结果。

    当然还有更多命令需要学习,但这些只是一些开始。

    如何更改phpMyAdmin默认的URL

    保留phpMyAdmin访问链接的默认设置 ( http://website.com/phpMyAdmin) 可能会带来安全风险。

    如果

  • 使用MAMP时如何修复“此站点无法提供安全连接”错误

    使用MAMP时如何修复“此站点无法提供安全连接”错误

    没有什么比错误消息更能让您的工作戛然而止了——尤其是在涉及安全的情况下。阅读“此站点无法提供安全连接”的通知可能会令人困惑和震惊。如果您在MAMP安装中遇到,它也可能具有破坏性,因为这些站点通常是本地测试安装

    此问题通常与您的Web浏览器或站点的SSL证书有关。幸运的是,修复它相对容易。这可能就像清除浏览器的缓存一样简单。

    在本文中,我们将了解此错误消息的最常见原因。然后,我们将引导您了解如何进行故障排除和修复,以便您可以回到更重要的事情上。

    1. 此站点无法提供安全连接错误介绍
    2. 为什么会出现此站点无法提供安全连接错误
    3. 如何修复此站点无法提供安全连接错误

    此站点无法提供安全连接错误介绍

    首先,什么是“安全连接”?本质上,它是到使用HTTPS而不是HTTP的网站的连接。大多数浏览器在地址栏中显示带有挂锁图标的这些站点,以表明连接是安全的。

    闪电博使用加密的HTTPS连接

    闪电博使用加密的HTTPS连接

    与HTTP相比,HTTPS提供了主要的安全优势,但它也有严格的要求以确保合规性。其中之一是存在有效的SSL证书

    “此站点无法提供安全连接(This site can’t provide a secure connection)”错误表示SSL证书存在问题。换句话说,该站点声称符合HTTPS,但它要么不提供证书,要么使用无效的证书。如果无法验证证书,浏览器将不会加载该站点,而是会显示此错误消息。

    关于此通知的另一件事是,它的呈现方式可能因浏览器而异。但是,在每种情况下,该消息都会以某种形式提及安全连接。

    以下是该消息在Google Chrome中的外观:

    Google Chrome中的安全连接错误

    Google Chrome中的安全连接错误

    在Mozilla Firefox中,它的显示方式如下:

    Mozilla Firefox中的安全连接错误

    Mozilla Firefox中的安全连接错误

    在Microsoft Edge中的样子:

    Microsoft Edge中的安全连接错误

    Microsoft Edge中的安全连接错误

    如您所见,大多数浏览器没有提供有关错误消息的太多信息。Firefox至少为您提供了一些入门指导,但它仍然相当模糊。别担心 – 我们将在本文的其余部分清除任何混淆。

    为什么会出现“此站点无法提供安全连接”错误

    现在,只是因为你看到一个关于网站安全警告并不一定意味着该网站是不是安全。虽然这是一种可能性,但它通常更温和。常见原因分为两类:Web浏览器问题和站点或系统配置问题。

    如果您在一个浏览器中看到错误,但该页面在其他浏览器中运行良好,则表明您的浏览器(通常是缓存)存在问题。如果错误出现在所有浏览器中,您就知道问题出在您使用的计算机或网站本身。

    让我们探讨此错误消息的最常见原因:

    • 您的本地环境没有SSL证书。如果您使用的是MAMP等本地环境,则您的站点可能没有证书。这应该是故障排除的第一步,因为这可能是导致问题的原因。
    • 浏览器中过时的SSL缓存。这是比较流行的原因之一。Web浏览器将SSL证书存储在缓存中,就像其他数据一样。这意味着他们不必每次访问站点时都验证证书,从而加快了浏览速度。但是,如果您的SSL证书发生更改并且浏览器仍在加载较旧的缓存版本,则可能会导致弹出此错误。
    • 计算机上的时间和日期设置不正确。如果您的计算机设置了错误的时间和日期,则可能会导致SSL证书身份验证出现问题。幸运的是,这是一个相当容易的修复。
    • 流氓浏览器扩展。错误配置或行为不当的浏览器扩展也可能导致证书身份验证问题。虽然这可能 是恶意的,但更多时候是简单的编码错误。
    • 过分热情的杀毒软件。同样,实时扫描您的连接的防病毒软件有时会抛出此消息。这可能是由于编码错误或仅仅是过于激进的设置。
    • 无效或过期的SSL证书。如果您网站的SSL证书已过期或无效,您将看到此错误。证书需要定期更新。

    在下一节中,我们将介绍如何解决MAMP安全连接错误。

    使用MAMP时如何修复“此站点无法提供安全连接”错误

    正如我们之前提到的,对于MAMP安装,此问题最有可能的罪魁祸首是您的本地主机环境缺少 SSL 证书。幸运的是,使用OpenSSL创建一个相对容易,这样做应该可以解决您的错误消息。以下说明是为macOS用户设计的,但它们也应该适用于Linux。

    步骤 1:创建SSL根证书

    首先,您需要创建一个SSL根证书。这使您能够为您的域签署额外的证书。

    首先,在您的计算机上打开终端应用程序并输入以下命令:

    openssl genrsa -des3 -out rootCA.key 2048
    openssl genrsa -des3 -out rootCA.key 2048
    openssl genrsa -des3 -out rootCA.key 2048

    此命令生成文件名为rootCA.key的RSA-2048密钥。您将使用此密钥创建根证书。系统会要求您输入密码 – 记下它,因为在生成证书时您需要它来使用密钥。

    接下来,您可以输入以下命令来创建根SSL证书:

    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

    证书将保存到rootCA.pem文件中。“1024”代表证书保持有效的天数——您可以将其更改为您想要的任何内容。

    步骤 2:信任根证书

    准备好根证书后,下一步是告诉操作系统 (OS) 信任它。这可确保默认情况下使用它创建的任何未来证书都是可信的,从而节省您的时间。

    为此 ,请在macOS上打开Keychain Access应用程序,然后单击 侧栏中的系统证书。接下来,选择File > Import Items,然后选择上一步中创建的rootCA.pem证书。

    导入后,双击它并将使用此证书时的 选项更改为Always Trust。现在您已准备好为您的域创建SSL证书。

    步骤 3:创建OpenSSL配置文件

    接下来,您需要创建一个配置文件,其中包含您在创建证书时要使用的OpenSSL设置。首先,创建一个名为server.csr.cnf的文件。它应该包含以下内容:

    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn
    [dn]
    C=US
    ST=RandomState
    L=RandomCity
    O=RandomOrganization
    OU=RandomOrganizationUnit
    emailAddress=hello@example.com
    CN = localhost
    Save this file, then create another one named
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn
    [dn]
    C=US
    ST=RandomState
    L=RandomCity
    O=RandomOrganization
    OU=RandomOrganizationUnit
    emailAddress=hello@example.com
    CN = localhost
    Save this file, then create another one named
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn
    [dn]
    C=US
    ST=RandomState
    L=RandomCity
    O=RandomOrganization
    OU=RandomOrganizationUnit
    emailAddress=hello@example.com
    CN = localhost
    Save this file, then create another one named

    v3.ext

    , and add the following:
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = localhost
    , and add the following:
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = localhost
    , and add the following:
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names
    [alt_names]
    DNS.1 = localhost

    接下来,您将生成一个密钥来签署您的域SSL证书。

    步骤 4:为本地主机生成证书密钥

    返回终端应用程序并输入以下命令为localhost创建一个密钥:

    openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )
    openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )
    openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

    密钥存储在server.key文件中。

    步骤 5:为您的本地域创建SSL证书

    我们快完成了!现在是时候为localhost生成SSL证书了。您可以通过在终端应用程序中输入以下命令来执行此操作:

    openssl x509 -req –in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
    openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext
    openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

    此命令创建一个名为server.crt的证书文件。

    步骤 6:激活localhost的SSL证书

    最后,将 前两步中创建的server.keyserver.crt文件复制到您的MAMP安装文件夹中。您现在可以在本地安装的WordPress上启用HTTPS,而不会收到“此站点无法提供安全连接”错误。

    小结

    MAMP中的“此站点无法提供安全连接”消息不仅会阻止访问您的站点,而且还会由于潜在的安全隐患而令人担忧。幸运的是,它通常是良性的并且相对容易修复。

    此错误通常表示您的浏览器配置或站点上的SSL证书有问题(在localhost 上,这通常意味着您根本没有)。修复它只涉及使用OpenSSLlocalhost生成SSL证书。按照上面列出的提示操作,您应该能够快速解决此错误,以便您可以重新开始工作。

  • wp-config.php文件——深入探讨如何配置WordPress

    wp-config.php文件——深入探讨如何配置WordPress-1

    WordPress安装最重要的文件之一是配置文件。它驻留在根目录中,包含常量定义和PHP指令,使WordPress按您想要的方式工作。WP-config.php文件如数据库连接细节,表前缀,路径对特定目录和很多相关的特定设置文件存储数据功能。

    基本的wp-config.php文件

    首次安装WordPress时,系统会要求您输入所需信息,例如数据库详细信息和表前缀。有时您的主机会为您设置WordPress,您不需要手动运行设置。但是,当您手动运行5分钟安装时,系统会要求您输入一些存储在wp-config中的最相关数据。

    wp-config.php文件中的数据

    当您运行设置时,您将需要输入存储在wp-config.php文件中的数据

    这是一个基本的wp-config.php文件:

    // ** MySQL settings – You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define(‘DB_NAME’, ‘database_name_here’);
    /** MySQL database username */
    define(‘DB_USER’, ‘username_here’);
    /** MySQL database password */
    define(‘DB_PASSWORD’, ‘password_here’);
    /** MySQL hostname */
    define(‘DB_HOST’, ‘localhost’);
    /** Database Charset to use in creating database tables. */
    define(‘DB_CHARSET’, ‘utf8’);
    /** The Database Collate type. Don’t change this if in doubt. */
    define(‘DB_COLLATE’, );
    define(‘AUTH_KEY’,‘put your unique phrase here’);
    define(‘SECURE_AUTH_KEY’,‘put your unique phrase here’);
    define(‘LOGGED_IN_KEY’,‘put your unique phrase here’);
    define(‘NONCE_KEY’,‘put your unique phrase here’);
    define(‘AUTH_SALT’,‘put your unique phrase here’);
    define(‘SECURE_AUTH_SALT’,‘put your unique phrase here’);
    define(‘LOGGED_IN_SALT’,‘put your unique phrase here’);
    define(‘NONCE_SALT’,‘put your unique phrase here’);
    $table_prefix = ‘wp_’;
    /* That’s all, stop editing! Happy blogging. */
    // ** MySQL settings – You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define(‘DB_NAME’, ‘database_name_here’);

    /** MySQL database username */
    define(‘DB_USER’, ‘username_here’);

    /** MySQL database password */
    define(‘DB_PASSWORD’, ‘password_here’);

    /** MySQL hostname */
    define(‘DB_HOST’, ‘localhost’);

    /** Database Charset to use in creating database tables. */
    define(‘DB_CHARSET’, ‘utf8’);

    /** The Database Collate type. Don’t change this if in doubt. */
    define(‘DB_COLLATE’, ”);

    define(‘AUTH_KEY’,’put your unique phrase here’);
    define(‘SECURE_AUTH_KEY’,’put your unique phrase here’);
    define(‘LOGGED_IN_KEY’,’put your unique phrase here’);
    define(‘NONCE_KEY’,’put your unique phrase here’);
    define(‘AUTH_SALT’,’put your unique phrase here’);
    define(‘SECURE_AUTH_SALT’,’put your unique phrase here’);
    define(‘LOGGED_IN_SALT’,’put your unique phrase here’);
    define(‘NONCE_SALT’,’put your unique phrase here’);

    $table_prefix = ‘wp_’;

    /* That’s all, stop editing! Happy blogging. */

    // ** MySQL settings - You can get this info from your web host ** //
    /** The name of the database for WordPress */
    define('DB_NAME', 'database_name_here');
    
    /** MySQL database username */
    define('DB_USER', 'username_here');
    
    /** MySQL database password */
    define('DB_PASSWORD', 'password_here');
    
    /** MySQL hostname */
    define('DB_HOST', 'localhost');
    
    /** Database Charset to use in creating database tables. */
    define('DB_CHARSET', 'utf8');
    
    /** The Database Collate type. Don't change this if in doubt. */
    define('DB_COLLATE', '');
    
    define('AUTH_KEY','put your unique phrase here');
    define('SECURE_AUTH_KEY','put your unique phrase here');
    define('LOGGED_IN_KEY','put your unique phrase here');
    define('NONCE_KEY','put your unique phrase here');
    define('AUTH_SALT','put your unique phrase here');
    define('SECURE_AUTH_SALT','put your unique phrase here');
    define('LOGGED_IN_SALT','put your unique phrase here');
    define('NONCE_SALT','put your unique phrase here');
    
    $table_prefix  = 'wp_';
    
    /* That's all, stop editing! Happy blogging. */

    通常,这个文件会在你运行安装程序时自动生成,但偶尔WordPress没有权限写入安装文件夹。在这种情况下,您应该创建一个空的wp-config.php文件,从wp-config-sample.php复制和粘贴内容,并将正确的值设置为所有定义的常量。完成后,将文件上传到根文件夹并运行WordPress。

    注意:常量定义和PHP指令以特定的顺序出现,我们永远不应该改变。我们永远不应该在以下注释行下添加内容:

    /* That’s all, stop editing! Happy blogging. */
    /* That’s all, stop editing! Happy blogging. */
    /* That's all, stop editing! Happy blogging. */

    首先,是您应该从主机收到的数据库常量的定义:

    • DB_NAME
    • DB_USER
    • DB_PASSWORD
    • DB_HOST
    • DB_CHARSET
    • DB_COLLATE

    根据数据库详细信息,八个安全密钥将使站点更安全地抵御黑客。当您运行安装WordPress将自动生成安全和盐密钥,但您可以随时更改它们,添加任意字符串。为了更好的安全性,请考虑使用在线生成器

    $table_prefix变量存储所有WordPress表的前缀。不幸的是,任何人都知道它的默认值,这可能会导致WordPress数据库出现漏洞,可以通过$table_prefix在运行设置时设置自定义值来轻松修复。要更改工作网站中的表前缀,您应该对数据库运行多个查询,然后手动编辑wp-config.php文件。如果您无权访问数据库或者您没有构建自定义查询所需的知识,那么您可以安装一个像Change Table Prefix这样的插件来重命名数据库表和字段名称,并更新配置文件风险。

    注意:即使您将使用插件更改表前缀,备份WordPress文件和数据库也是一个好习惯。

    到目前为止,分析仅限于基本配置。但是我们可以使用许多常量来定义以启用功能、自定义和保护安装。

    基本配置:编辑文件系统

    WordPress文件系统为用户和黑客所熟知。为此,您可以考虑通过将特定文件夹移动到任意位置并在wp-config文件中设置相应的URL和路径来更改内置文件结构。首先,我们可以通过定义两个常量来移动内容文件夹。第一个设置完整目录路径:

    define( ‘WP_CONTENT_DIR’, dirname(__FILE__) . ‘/site/wp-content’ );
    define( ‘WP_CONTENT_DIR’, dirname(__FILE__) . ‘/site/wp-content’ );
    define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/site/wp-content' );

    第二个设置新目录URL:

    define( ‘WP_CONTENT_URL’, ‘http://example.com/site/wp-content’ );
    define( ‘WP_CONTENT_URL’, ‘http://example.com/site/wp-content’ );
    define( 'WP_CONTENT_URL', 'http://example.com/site/wp-content' );

    我们可以通过定义以下常量来移动插件文件夹:

    define( ‘WP_PLUGIN_DIR’, dirname(__FILE__) . ‘/wp-content/mydir/plugins’ );
    define( ‘WP_PLUGIN_URL’, ‘http://example.com/wp-content/mydir/plugins’ );
    define( ‘WP_PLUGIN_DIR’, dirname(__FILE__) . ‘/wp-content/mydir/plugins’ );
    define( ‘WP_PLUGIN_URL’, ‘http://example.com/wp-content/mydir/plugins’ );
    define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-content/mydir/plugins' );
    define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mydir/plugins' );

    同样,我们可以通过设置新的目录路径来移动uploads文件夹:

    define( ‘UPLOADS’, ‘wp-content/mydir/uploads’ );
    define( ‘UPLOADS’, ‘wp-content/mydir/uploads’ );
    define( 'UPLOADS', 'wp-content/mydir/uploads' );

    注意:所有路径都相对于ABSPATH,并且它们不应包含前导斜杠。

    完成后,排列文件夹并重新加载WordPress。

    该图显示了与自定义结构相比的内置文件结构

    该图显示了与自定义结构相比的内置文件结构

    不可能从wp-config文件中移动/wp-content/themes文件夹,但我们可以在插件或主题的功能文件中注册一个新的主题目录。

    开发人员功能:调试模式和保存查询

    如果您是开发人员,您可以强制WordPress显示错误和警告,以帮助您进行主题和插件调试。要启用调试模式,您只需将WP_DEBUG值设置为true,如下所示:

    define( ‘WP_DEBUG’, true );
    define( ‘WP_DEBUG’, true );
    define( 'WP_DEBUG', true );

    WP_DEBUG默认设置为false。如果您需要禁用调试模式,您可以删除定义,或将常量的值设置为 false。当您在实时站点上工作时,您应该禁用调试模式。错误和警告不应显示给站点查看者,因为它可以为黑客提供有价值的信息。但是,如果您无论如何都必须进行调试怎么办?在这种情况下,您可以强制WordPress在/wp-content文件夹中的debug.log文件中保留错误和警告的内存。要启用此功能,请将以下代码复制并粘贴到wp-config.php文件中:

    define( ‘WP_DEBUG’, true );
    define( ‘WP_DEBUG_LOG’, true );
    define( ‘WP_DEBUG_DISPLAY’, false );
    @ini_set( ‘display_errors’, 0 );
    define( ‘WP_DEBUG’, true );
    define( ‘WP_DEBUG_LOG’, true );
    define( ‘WP_DEBUG_DISPLAY’, false );
    @ini_set( ‘display_errors’, 0 );
    define( 'WP_DEBUG', true );
    define( 'WP_DEBUG_LOG', true );
    define( 'WP_DEBUG_DISPLAY', false );
    @ini_set( 'display_errors', 0 );

    要使此功能起作用,我们首先需要启用调试模式。然后,设置WP_DEBUG_LOG为true我们会强制WordPress将消息存储到debug.log文件中,而定义WP_DEBUG_DISPLAY为false即不会在屏幕上直接输出这些信息。最后,我们将PHP变量的值设置为0,display_errors这样错误消息就不会打印到屏幕上。wp-config永远不会从缓存中加载。因此,这是覆盖php.ini设置的好地方。

    注意:这是一个很棒的功能,您可以利用它来注册WordPress不会在屏幕上打印的消息。例如,当publish_post触发操作时,WordPress会加载一个保存数据的脚本,然后将用户重定向到文章编辑页面。在这种情况下,您可以注册消息,但不能将它们打印在屏幕上。

    另一个调试常量确定要加载的脚本和样式的版本。SCRIPT_DEBUG如果要加载未压缩版本,请设置为true:

    define( ‘SCRIPT_DEBUG’, true );
    define( ‘SCRIPT_DEBUG’, true );
    define( 'SCRIPT_DEBUG', true );

    如果您的主题或插件显示从数据库检索的数据,您可能需要存储查询详细信息以供后续查看。SAVEQUERIES常量强制WordPress将查询信息存储到$wpdb->queries数组中。将打印这些详细信息,将以下代码添加到页脚模板:

    if ( current_user_can( ‘administrator’ ) ) {
    global $wpdb;
    echo ‘<pre>’;
    print_r( $wpdb->queries );
    echo ‘</pre>’;
    }
    if ( current_user_can( ‘administrator’ ) ) {
    global $wpdb;
    echo ‘<pre>’;
    print_r( $wpdb->queries );
    echo ‘</pre>’;
    }
    if ( current_user_can( 'administrator' ) ) {
            global $wpdb;
            echo '<pre>';
            print_r( $wpdb->queries );
            echo '</pre>';
    }

    有关此功能的更深入分析,请参阅如何在WordPress中构建高效查询

    当您的网站长大后,您可能希望减少文章修订的数量。默认情况下,WordPress每60秒自动保存一次修订。我们可以通过在wp-config中设置自定义间隔来更改此值,如下所示:

    define( ‘AUTOSAVE_INTERVAL’, 160 );
    define( ‘AUTOSAVE_INTERVAL’, 160 );
    define( 'AUTOSAVE_INTERVAL', 160 );

    当然,您也可以减少自动保存间隔。每次我们保存我们的编辑时,WordPress都会在文章表中添加一行,以便我们可以恢复文章和页面的先前修订。这是一个有用的功能,当我们的网站变大时,它可能会变成一个问题。幸运的是,我们可以减少要存储的最大发布修订数量,或者完全禁用该功能。如果您想禁用后期修订,请定义以下常量:

    define( ‘WP_POST_REVISIONS’, false );
    define( ‘WP_POST_REVISIONS’, false );
  • 如何提升WordPress站内搜索速度及结果准确率

    如何提升WordPress站内搜索速度及结果准确率

    为什么人们首先使用网站搜索表单?这是因为他们正在寻找通过浏览网站或使用导航无法获得的即时和相关结果。

    有时,这些搜索结果会提供他们问题的答案(例如有关公司退货政策的信息)或匹配产品或内容的列表(例如与页面构建器插件相关的博客文章)。不过,无论他们在寻找什么,有一件事是肯定的:

    访问者希望您的WordPress搜索表单能够快速准确地提供结果。

    当您从整体上看待消费者行为时,这是有道理的。谷歌在在线搜索方面设定了一个几乎不可能的标准。根据SparkToro的调查结果,Google中超过一半的搜索都是零点击的。基本上,谷歌已经使搜索变得如此高效,以至于人们通常不需要访问网站来获得他们问题的答案。

    当然,您的网站访问者并没有使用内部搜索来期待或想要零点击结果。他们正在使用搜索来查找您网站的其他部分进行探索。但是,你的WordPress的搜索和谷歌搜索的共同点是:消费者想要快速,方便,并从他们两个中找到相关的结果。

    只有一个问题:WordPress自带的搜索功能不是很好。

    这就是为什么在本教程中,我们将探索您需要了解的一切,以优化访问者的WordPress搜索体验

    1. 内部搜索到底有多重要?
    2. 如何将搜索添加到您的WordPress网站
    3. 如何改善内部WordPress搜索体验

    内部搜索到底有多重要?

    如果您以正确的方式设计网站,访问者自然会遵循您在他们面前布置的路径。一个组织良好的菜单也有帮助。

    也就是说,内部搜索在这方面发挥着重要作用。

    将WordPress搜索视为您网站的快速通行证。当您的搜索功能按其应有的方式执行时,它可以在几秒钟内将您的访问者从第1步带到第5步。

    这对于包含大量内容的 WordPress 网站特别有用。这里有些例子:

    电子商务

    Nordic Ware等在线商店可以帮助访问者从主页访问:

    Nordic Ware:主页在标题中带有搜索栏

    Nordic Ware:主页在标题中带有搜索栏

    只需使用网站右上角的搜索栏即可获得更窄的产品列表:

    Nordic Ware:搜索结果页面

    Nordic Ware:搜索结果页面

    通过始终显示产品搜索表单,访客无需筛选商店的菜单或类别来查找他们正在购买的特定商品。

    博客、播客和新闻网站

    拥有大型内容存储库的网站(例如闪电博有36页的WordPree教程技巧文章(并且还在不断增加))将从搜索栏中受益:

    闪电博:WordPress教程技巧分页

    闪电博:WordPress教程技巧分页

    通过在文章列表顶部放置一个特定于资源中心的搜索表单,读者可以比滚动36页更快地找到他们正在寻找的主题:

    闪电博资源中心列表顶部的WordPress搜索栏

    闪电博资源中心列表顶部的WordPress搜索栏

    包含大量内容的资源中心可能会变得难以导航。由于您希望保持博客页面简短以保持较高的加载速度,因此增加出现的文章数量并不是一个好主意。

    相反,搜索栏将帮助您的访问者更有效地浏览与其当前兴趣无关的文章。

    在线目录站点

    搜索是访问者在在线目录列表(例如房地产、旅游、专业服务等)的网站上做的第一件事,就像来自Trulia的这个例子:

    Trulia:主页搜索属性

    Trulia:主页搜索属性

    搜索元素总是很简单,可以开始。例如,指定地点、人名或职位。但是结果页面始终允许用户根据需要过滤结果:

    Trulia:示例搜索结果页面

    Trulia:示例搜索结果页面

    知识库

    搜索是Elementor等产品的帮助中心和知识库的有用组件:

    Elementor:知识库文章主题和计数

    Elementor:知识库文章主题和计数

    与手动搜索类别相比,搜索可帮助用户更快地找到问题的答案:

    Elementor:在文档中搜索“模板”

    Elementor:在文档中搜索“模板”

    在很多情况下,用户在使用SaaS产品时遇到的问题可以很容易地由用户自己解决。如果您想让实时聊天和帮助台支持远离易于解决的问题,请使您的知识库易于搜索。

    Bottom Line

    如果有大量的东西在您的网站,不要假设导航将帮助游客努力通过自己的方式吧。建立类似快速通行证的搜索体验,让他们准确地到达他们需要和想去的地方。

    如何将搜索添加到您的WordPress网站

    您有几个选项可以为您的网站实施和启用基本的WordPress搜索:

    使用您的主题将WordPress搜索添加到菜单中

    根据您安装的WordPress主题,您只需点击几下即可将搜索添加到您的菜单中。在这个例子中,我使用了Astra主题,顺便说一句,结果非常快!

    首先要做的是转到外观>自定义:

    WordPress – 导航到自定义菜单

    WordPress – 导航到自定义菜单

    接下来,转到标题> 主菜单。

    WordPress – 自定义菜单

    WordPress – 自定义菜单

    在“菜单中的最后一项”下,从下拉菜单中选择“搜索”。

    WordPress – 在菜单中添加搜索栏

    WordPress – 在菜单中添加搜索栏

    这将添加一个搜索图标和栏作为导航菜单的最后一个元素。

    WordPress – 添加了主题设置的搜索栏

    WordPress – 添加了主题设置的搜索栏

    使用其他WordPress主题时,此搜索激活设置可能与您的主题定制器不在同一位置。如果它可用,您会在“标题”设置下找到它。否则,您必须使用以下选项之一手动添加它。

    使用WordPress小工具添加搜索

    WordPress小工具使您能够将内容添加到内容周围元素(如侧边栏和页脚)中的专用块中。

    您可以使用WordPress小工具创建的一种内容块是搜索栏。

    首先在外观菜单下找到小部件:

    WordPress – 找到小工具菜单

    WordPress – 找到小工具菜单

    您可以在此处找到所有可用的小部件部分。根据您使用的主题或模板,您可能只会看到侧边栏或页脚,或者您可能会看到更全面的选择,如下所示:

    小工具示例

    小工具示例

    无论如何,您现在需要做的是决定您希望搜索栏出现的位置。

    假设您计划每天发布新的博客内容,并且知道存档将快速增长。因此,在每个博客页面上都有一个搜索栏将是有益的。

    滚动到小部件的底部并找到名为“搜索”的小工具:

    搜索小工具

    搜索小工具

    您可以通过单击它并选择将其添加到哪个部分来添加它,如下所示:

    使用下拉菜单添加搜索小工具

    使用下拉菜单添加搜索小工具

    或者您可以将小工具拖放到您希望它出现在的部分块中:

    通过拖放添加搜索小工具

    通过拖放添加搜索小工具

    一旦你把它放在你想要的地方,给它一个名字:

    为您的搜索小工具命名

    为您的搜索小工具命名

    保存您的更改,然后访问您的站点以确认它看起来像您希望的那样:

    搜索栏添加到博客

    搜索栏添加到博客

    您现在可以看到搜索栏位于博客侧边栏的顶部,可供您的读者使用。

    使用WordPress工具将搜索添加到您网站的主要内容

    虽然将搜索栏放在网站始终存在的元素中很有用,但您也可能会找到将其包含在页面实际内容中的理由。

    有几种方法可以实现这一点:

    使用WordPress编辑器

    Gutenberg编辑器无疑使设计更具创意的页面布局变得更加容易,而无需依赖HTML短代码

    借助WordPress编辑器,您现在可以添加到页面中的一个这样的元素是搜索小部件:

    在古腾堡搜索小工具区块

    在古腾堡搜索小工具区块

    使用此选项时,您可以更好地控制搜索栏的显示方式。例如,您可以更改搜索栏的标题、占位符文本以及按钮:

    使用古腾堡自定义搜​​索栏

    使用古腾堡自定义搜​​索栏

    您甚至可以使用自定义CSS类更改搜索区块的样式。

    使用页面构建器插件

    对于那些喜欢使用拖放式页面构建器插件(如Elementor)的人,您也可以使用您选择的插件访问搜索小工具。这个过程类似于你对古腾堡所做的。

    打开新页面或文章并激活Elementor编辑器后,从您的Elements列表中搜索WordPress搜索小工具:

    Elementor中的搜索小工具

    Elementor中的搜索小工具

    将搜索元素拖到您希望它出现在页面上的位置。例如,这是一个404页面,可帮助用户通过搜索栏回到正轨:

    带有搜索栏的404页面示例

    带有搜索栏的404页面示例

    如您所见,与Gutenberg相比,页面构建器插件让您可以更好地控制WordPress搜索栏的显示位置,允许您将其分层放置在其他内容之上。

    使用主题

    在某些情况下,您可能会发现一个主题和模板会自动向您的网站内容添加搜索。但是,执行此操作的主题类型往往是高度专业化的,例如住宅房地产主题

    住宅房地产主题演示

    住宅房地产主题演示

    由于在这些目录列表网站上搜索可能会变得复杂,因此主题开发人员将功能构建到模板中是有道理的。

    预订站点主题是另一个已经内置搜索功能的示例,就像这个来自Travel Booking主题的演示:

    旅行预订主题演示

    旅行预订主题演示

    可以想象,将搜索功能内置到您的 WordPress 主题和模板中将省去很多麻烦,而不必自己构建如此复杂的东西。如果主题针对性能进行了优化,那么它的搜索引擎解决方案也应该如此(再次,少担心一件事)。

    使用代码添加WordPress搜索

    还有另一种向您的网站添加基本搜索表单的方法,但它要求您熟悉编码。

    为此,请转到外观 > 主题编辑器:

    主题编辑器

    主题编辑器

    您在这里要做的是使用functions.php主题文件为搜索栏创建一个短代码:

    functions.php主题文件

    functions.php主题文件

    在文件底部,添加以下代码片段:

    add_shortcode( ‘shortcodename’, ‘get_search_form’);
    add_shortcode( ‘shortcodename’, ‘get_search_form’);
    add_shortcode( 'shortcodename', 'get_search_form');

    将“shortcodename”替换为您自己的搜索表单名称。确保全部为小写,没有空格、数字或符号。更新文件后,您就可以开始在您的网站上使用短代码。

    下面是一个例子:

    用于向您的网站添加搜索栏的自定义短代码

    用于向您的网站添加搜索栏的自定义短代码

    添加短代码的方式与将任何常规文本添加到站点的方式相同。请记住将其括在方括号 [] 中。

    虽然您将无法在编辑器中看到搜索栏,但请查看页面的预览,您会在网站的前端看到它:

    添加了短代码的搜索栏

  • wp_enqueue_scripts – 如何在WordPress中实现资源队列

    wp_enqueue_scripts – 如何在WordPress中实现资源队列-1
    在WordPress中,不是简单地将这些添加到标题中,您应该使用一种称为入队的方法,这是一种处理资产的标准化方式,具有管理依赖项的额外好处。在下面了解如何使用 wp_enqueue_scripts.

    排队的工作原理

    将脚本或样式排入队列时需要执行两个步骤。首先你注册它——告诉WordPress它在那里——然后你实际上将它排入队列,最终将它输出到标题中或在结束正文标签之前。

    有两个步骤的原因与模块化有关。有时您会想让WordPress知道某个资产,但您可能不想在每个页面上都使用它。例如:如果您正在构建一个使用Javascript的自定义图库简码,您实际上只需要在使用简码时加载JS – 可能不是在每个页面上。

    实现这一点的方法是首先注册脚本,只有在显示简码时才真正将其排入队列。

    使用wp_enqueue_scripts入队基础知识

    要在前端排队脚本和样式,您需要使用wp_enqueue_scripts钩子。在该挂钩的函数可以使用wp_register_script()wp_enqueue_script()wp_register_style()wp_enqueue_style()功能。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );

    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );
    }

    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_register_style( 'custom-gallery', plugins_url( '/css/gallery.css' , __FILE__ ) );
        wp_register_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ) );
    
        wp_enqueue_style( 'custom-gallery' );
        wp_enqueue_script( 'custom-gallery' );
    }

    在上面的例子中,我在同一个函数中注册和排队资产,这有点多余。实际上,您可以使用入队函数立即注册和入队,方法是使用与注册函数中相同的参数:

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_style( 'custom-gallery', plugins_url( '/css/gallery.css' , __FILE__ ) );
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ) );
    }

    如果我要将这两个函数分开,我会通过在不同的钩子中使用它们来实现。在一个真实的例子中,我们可以使用wp_enqueue_scripts钩子来注册资产和短代码的函数来将它们排入队列。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );
    }
    add_shortcode( ‘custom_gallery’, ‘custom_gallery’ );
    function custom_gallery( $atts ){
    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );
    // Gallery code here
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery’, plugins_url( ‘/css/gallery.css’ , __FILE__ ) );
    wp_register_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ) );

    }

    add_shortcode( ‘custom_gallery’, ‘custom_gallery’ );

    function custom_gallery( $atts ){

    wp_enqueue_style( ‘custom-gallery’ );
    wp_enqueue_script( ‘custom-gallery’ );

    // Gallery code here
    }

    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_register_style( 'custom-gallery', plugins_url( '/css/gallery.css' , __FILE__ ) );
        wp_register_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ) );
    
    }
    
    add_shortcode( 'custom_gallery', 'custom_gallery' );
    
    function custom_gallery( $atts ){
    
        wp_enqueue_style( 'custom-gallery' );
        wp_enqueue_script( 'custom-gallery' );
    
        // Gallery code here
    }

    依赖管理

    WordPress的排队机制内置了对依赖项管理的支持,使用两者wp_register_style()wp_register_script()函数的第三个参数。如果您不需要将它们分开,您也可以立即使用排队功能。

    第三个参数是需要在当前资产入队之前加载的已注册脚本/样式数组。我们上面的例子很可能依赖于jQuery,所以让我们现在指定:

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ), array( 'jquery' ) );
    }

    我们不需要自己注册或排队jQuery,因为它已经是WordPress的一部分。您可以在Codex中找到WordPress中可用的脚本和样式列表。

    如果您有自己的依赖项,则需要注册它们,否则您的脚本将无法加载。下面是一个例子:

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’ ) );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ) );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’ ) );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ), array( 'jquery' ) );
        wp_enqueue_script( 'custom-gallery-lightbox', plugins_url( '/js/gallery-lightbox.js' , __FILE__ ), array( 'custom-gallery' ) );
    }

    假设第一个脚本是画廊,第二个脚本是使图像在灯箱中打开的扩展。请注意,即使我们的第二个脚本依赖于jQuery,我们也不需要指定这一点,因为我们的第一个脚本已经加载了jQuery。也就是说,声明所有依赖项可能是个好主意,只是为了确保如果您忘记包含依赖项,不会有任何破坏。

    WordPress 现在知道我们需要哪些脚本,并且可以计算出需要将它们添加到页面的顺序。

    每当您可以在页脚中加载脚本时,您都应该这样做。这会增加明显的页面加载时间,并可以防止您的网站在加载脚本时挂起,尤其是当它们包含AJAX调用时。

    入队机制可以使用第五个参数(第四个是可选版本号)向页脚添加脚本。如果我们稍微修改一下,上面的示例将加载页脚中的脚本。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ), ‘1.0’, true );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’, ‘jquery’ ), ‘1.0’, true );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_enqueue_script( ‘custom-gallery’, plugins_url( ‘/js/gallery.js’ , __FILE__ ), array( ‘jquery’ ), ‘1.0’, true );
    wp_enqueue_script( ‘custom-gallery-lightbox’, plugins_url( ‘/js/gallery-lightbox.js’ , __FILE__ ), array( ‘custom-gallery’, ‘jquery’ ), ‘1.0’, true );
    }
    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_enqueue_script( 'custom-gallery', plugins_url( '/js/gallery.js' , __FILE__ ), array( 'jquery' ), '1.0', true );
        wp_enqueue_script( 'custom-gallery-lightbox', plugins_url( '/js/gallery-lightbox.js' , __FILE__ ), array( 'custom-gallery', 'jquery' ), '1.0', true );
    }

    指定true作为第五个参数会将脚本放在页脚中,使用false或省略参数将在页眉中加载内容。正如我之前提到的,只要有可能,就在页脚中加载脚本。

    为样式指定媒体

    使用样式注册/入队功能的第五个参数,您可以控制已定义脚本的媒体类型(打印、屏幕、手持设备等)。通过使用此参数,您可以将样式的加载限制为特定的媒体类型,这是一个方便的小优化技巧。

    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery-print’, plugins_url( ‘/css/gallery.css’ , __FILE__ ), array(), ‘1.0’, ‘print’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘my_plugin_assets’ );
    function my_plugin_assets() {
    wp_register_style( ‘custom-gallery-print’, plugins_url( ‘/css/gallery.css’ , __FILE__ ), array(), ‘1.0’, ‘print’ );

    }

    add_action( 'wp_enqueue_scripts', 'my_plugin_assets' );
    function my_plugin_assets() {
        wp_register_style( 'custom-gallery-print', plugins_url( '/css/gallery.css' , __FILE__ ), array(), '1.0', 'print' );
    
    }

    有关可以使用的媒体类型的完整列表,请查看CSS规范

    小结

    对资产进行排队是一种强大的处理方式。它为您和其他插件/主题制作者提供了对整个系统的更多控制,并使依赖管理脱离您的手。

    如果这还不够,这是添加资源的方式,如果您不使用此方法,许多主题市场和WordPress插件库本身将不会批准您的工作。

  • 如何在FileZilla中显示隐藏文件

    如何在FileZilla中显示隐藏文件
    FileZilla是一种流行的SFTP客户端,用于在您的服务器和计算机之间传输文件。

    有时,您可能需要传输以句点开头的“隐藏”或“不可见”文件或文件夹(例如.htaccess.maintenance)。如果您在使用FileZilla查找服务器上的隐藏文件时遇到问题,您可能需要配置应用程序以显示隐藏文件。

    在本文中,我们将向您展示如何做到这一点。

    在FileZilla中显示隐藏文件

    在连接到您的服务器之前,单击 FileZilla 菜单栏中的“服务器”选项卡,然后单击下拉菜单中的强制显示隐藏文件(Force showing hidden files)。选中此选项将强制FileZilla显示隐藏的文件和目录。

    配置FileZilla以显示隐藏文件

    配置FileZilla以显示隐藏文件

    接下来,通过SFTP连接到您的服务器

    您现在应该能够看到服务器上的隐藏文件。在下面的屏幕截图中,我们的~/public文件夹中有两个隐藏文件- .hiddenfile.htaccess.

    FileZilla中的隐藏文件

    FileZilla中的隐藏文件

    能够查看服务器上的隐藏文件对于排除WordPress故障非常重要。例如,如果您的站点卡在维护模式,您可以检查.maintenance站点根目录中是否有可以删除的文件。

    同样,对于使用Web服务器Apache的站点,了解如何启用隐藏文件还可以让您更改.htaccess文件而无需联系主机的支持团队。如您所见,配置FileZilla以显示隐藏文件是一个快速而简单的过程!

  • WordPress REST API入门基础知识点

    WordPress REST API入门基础知识点

    WordPress REST API正在改变WordPress。您可能没有注意到,因为其中很多都在幕后,但是REST API的含义对WordPress的未来产生了巨大的影响,无论是在代码库还是使用方面。

    如果您没有使用过WordPress REST API,您可能想知道它是什么。因此,让我们先看看REST API是什么。

    在本文中,我们讲解WordPress REST API的一些基础知识。我们将研究它的作用、工作原理以及它给平台带来的变化。最后,我们将讨论您可以用它做的一些事情。

    当REST API最终被添加到WordPress的核心时,漫长的旅程就结束了。许多人预计这一变化是该平台历史上WordPress向前迈出的最大一步。但是,如果您不熟悉REST API,您可能会对它所获得的所有关注感到困惑。

    简而言之,WordPress REST API的加入使WordPress变成了一个功能齐全的应用程序框架。这显着提高了它的“可扩展性”,或者说它可以通过新特性和功能进行扩展。此外,它还扩展了平台与其他站点和应用程序进行通信的潜力。

    1. 什么是WordPress REST API?
    2. 了解WordPress REST API
    3. 如何访问WordPress REST API
    4. WordPress REST API命令概述
    5. 何时不使用WordPress REST API
    6. 使用WordPress REST API的实际应用程序

    什么是WordPress REST API?

    在我们深入研究WordPress REST API之前,了解我们的术语很重要。这是一个我们需要使用大量首字母缩略词的主题,所以让我们先把它们弄清楚。

    什么是应用程序编程接口 (API)?

    首先,您需要知道什么是应用程序编程接口 (API)。用最简单的术语来说,API是一个系统使其他系统能够连接到其数据的一种方式。例如,当网站向页面添加Facebook的“Like”按钮时,它会通过连接到Facebook的API来实现这一点。这让网页可以使用API来接收数据(点赞按钮的代码)和发送数据(点赞请求)。

    应用程序编程接口或API被定义为:

    “客户端和服务器之间的接口或通信协议,旨在简化客户端软件的构建。”

    如果您不熟悉API,那可能没有多大帮助。更简单地说,API是一组允许一个系统与另一个系统交互(或“接口”)的代码。如果您曾经将Google地图添加到您的WordPress站点,那么您就使用了Google的Maps API,它允许您的WordPress站点与Google Maps交互。

    这些系统不需要完全分开。WordPress已经有多个API,用于插件、设置和短代码等。插件和主题开发人员可以使用这些来与WordPress核心进行交互并使事情发生(例如创建短代码和向WordPress管理员添加设置屏幕)。

    与REST API的不同之处在于它允许WordPress安装本身之外的系统与WordPress交互,这就是REST部分的用武之地。

    什么是具象状态转移 (REST)?

    那么,REST API究竟是什么?具象状态传输 (REST)是一种特定于Web服务的 API。它包含一组标准化的指令和规则,使所有“RESTful”服务更容易相互连接。

    简而言之,REST API使您能够向外部系统发出请求。这方面的一个例子是Twitter。您可以使用其API向特定用户请求一定数量的推文。然后API将根据您的请求返回推文,您可以使用HTML和CSS将其嵌入您的网站。

    这些请求是使用JavaScript Object Notation (JSON) 执行的。这是一种专为发送、接收和存储数据而设计的语言。我们将在本文后面介绍JSON,但我们建议您先花点时间熟悉一下这种语言。这将帮助您准备好使用WordPress REST API,并理解我们将要讨论的一些概念。

    WordPress REST API是一个接口,开发人员可以使用它从WordPress安装本身之外访问WordPress。您可以使用JavaScript访问它,这意味着它可用于创建交互式网站和应用程序。

    REST代表 Representational State Transfer,API 代表应用程序编程接口。让我们来看看每一个的含义。

    Representational State Transfer (REST) 提供了 Web 系统可以用来相互交互的标准。如果没有 REST,两个系统将无法相互理解,从而来回发送数据。

    要使应用程序成为RESTful,它必须符合五个原则:

    1. 统一界面。用于访问系统中资源的URL必须是统一的、一致的,并且可以通过常见的方法(例如GET)(稍后会介绍更多)进行访问。
    2. 客户端服务器。客户端应用程序和服务器应用程序必须是分开的,因此它们可以相互独立开发。如果服务器端技术(即 WordPress)发生变化,服务器端应用程序(例如一个应用程序)必须仍然能够通过相同的简单方法访问它。
    3. 无国籍。使用API发出新请求时,服务器不会更改状态。它不存储已发出的请求。
    4. 可缓存。所有资源都必须是可缓存的,以提高速度并符合Web标准。缓存可以在服务器端或客户端实现。
    5. 分层系统。RESTful系统允许您使用多个层来访问它,如果需要,将数据存储在中间服务器中。服务器无法判断最终客户端是否直接连接到它。

    所有这些约束都与网页和应用程序相关,并控制应用程序与API交互的方式。

    这对WordPress意味着什么?

    将REST和API放在一起意味着WordPress REST API是一组代码,旨在使其他系统能够与WordPress交互,并且它的构建方式可确保这些系统能够相互理解。

    这意味着第三方网站或移动应用程序,例如,可以访问您的WordPress数据库,从中获取数据并向其中添加数据。

    不过,这有许多含义和用途。

    了解WordPress REST API

    WordPress REST API

    WordPress REST API的功能与我们已经提到的例子大体相同。基本上,WordPress REST API使您可以从任何与JSON兼容的框架中访问WordPress的所有功能。

    与Twitter的API使您能够检索和发送推文的方式类似,WordPress REST API可用于管理来自外部平台的文章、用户、类别等。这使您能够以多种前所未有的方式使用WordPress。

    WordPress REST API的背景

    REST API早在2013年就宣布了,它以插件的形式开始,旨在通过4.1版将其合并到WordPress核心中。正如经常发生的那样,延迟会推迟发布,直到三年后随着WordPress 4.7的发布,它最终被实现到核心中。

    WordPress REST API于2016年12月作为4.7版核心的一部分发布,但在此之前它作为插件存在。

    对于许多人来说,这是一个漫长但值得的等待,他们将WordPress REST API视为平台向前迈出的重要一步。您可能想知道为什么这个添加如此重要,特别是因为很多用户可能没有注意到太大的区别。事实证明,出于多种原因,包含REST API是对WordPress的根本性更改。

    例如,通过实施REST API,WordPress从简单的创建网站的平台迈出了一步。相反,它现在已经成为一个成熟的应用程序框架。这意味着开发人员可以使用WordPress站点为移动设备和网络创建应用程序,或作为信息存储库。

    这种转变也使WordPress摆脱了对PHP的依赖。通过使WordPress与任何JSON-compatible语言兼容,REST API极大地扩展了开发人员的可能性,使他们能够将WordPress功能与几乎任何框架一起使用。

    它旨在支持一系列基于WordPress构建的应用程序,并将WordPress从内容管理系统转变为应用程序平台。

    它被WordPress.com广泛使用,其基于JavaScript的界面使用REST API与WordPress数据库进行交互。古腾堡编辑界面也使用它,该界面在2019年成为核心的一部分。

    REST API扩大了WordPress可用于的应用程序范围。虽然内容管理系统擅长运行复杂的网站,但应用程序平台也可用于支持基于Web的单页应用程序或SPA(如果您曾经使用过Google文档,那么您已经使用过其中之一)。

    在这些中,当用户执行操作时会刷新内容,而不是加载新页面。因为它使用JavaScript(一种客户端语言)而不是PHP(一种服务器端语言),所以它可以在用户的​​浏览器中进行操作,而无需不断地向服务器发送请求。

    对WordPress用户和开发人员的影响

    如果您是使用WordPress的用户和/或开发人员,那么REST API有很多含义。

    对于用户,这些包括:

    • 对界面的更改,包括古腾堡编辑器。
    • 对WordPress移动应用程序的更改和改进。
    • 随着时间的推移,自托管的WordPress管理屏幕看起来更像WordPress.com屏幕。

    对于开发者来说,还有更广泛的意义和可能性:

    • 能够使用REST API创建SPA,从WordPress中提取数据,但看起来与WordPress非常不同。
    • 将WordPress与其他前端技术和系统集成的能力。
    • 如果您是不编写PHP的前端开发人员,则可以使用WordPress进行开发。
    • 对于PHP开发人员来说,越来越需要扩展您的技能以包含JavaScript。
    • 特定更改,例如需要在页面和后期编辑屏幕中构建古腾堡区块而不是元框。

    随着时间的推移,WordPress REST API将意味着更多的WordPress核心将用JavaScript而不是PHP编写。如果您是WordPress开发人员,这意味着您需要学习JavaScript。

    REST API和JSON如何协同工作

    最后,REST API在可用于平台的接口方面提供了更高的灵活性。它使管理界面完全可选,因为您现在可以完全通过JSON命令与您的WordPress站点进行交互。让我们看看JSON和REST API如何结合起来使这成为可能。

    WordPress REST API是为了响应网站和应用程序开发方式的变化以及更广泛地开放WordPress的需要而开发的。

    到目前为止,您应该对WordPress REST API的理论方面有所了解,所以让我们看看该技术更实用的方面。官方手册介绍如何使用REST API,如下所示:

    “WordPress REST API为WordPress数据类型提供API端点,允许开发人员通过发送和接收JSON(JavaScript Object Notation)对象与站点进行远程交互。”

    我们需要关注的第一个词是“端点”。将端点视为可以使用JSON请求调用的一段数据或函数的最简单方法。默认情况下,WordPress提供了大量可供使用的标准端点,但开发人员也可以创建自定义端点

    要到达端点,您必须使用采用普通URL形式的“路由”。您现在甚至可以自己尝试一下。转到您自己的WordPress站点,并将/wp-json/wp/v2 添加到其URL的末尾。如果您的站点是http://example.com,您将输入http://example.com/wp-json/wp/v2

    当您加载此路由时,您将到达端点,在这种情况下,它以(凌乱的)JSON格式返回站点的所有内容和元数据。通过使用不同的路由,您可以访问不同的端点,以获取特定类型的信息并执行各种任务。

    您将在REST API中使用三个主要的JSON请求,所以现在让我们快速浏览一下它们。他们是:

    • GET-此类请求用于从API检索和列出数据。例如,您将使用GET请求返回您网站上的用户列表或编译特定时间范围内的博客文章。
    • POST-此请求用于向API发送数据。它使您能够将新信息推送到WordPress,例如添加新用户和帖子或更新现有数据。
    • DELET-顾名思义,这个请求是用来删除数据的。这使您能够删除文章、页面、用户等。

    有时可以将GET和POST与相同的端点一起使用以获得不同的结果。例如,让我们看看端点/me/settings/。如果您要在此端点上执行GET请求,您将收到当前用户设置的列表。但是,通过在同一端点上使用POST请求,您将能够改为更新设置。

    如何访问WordPress REST API

    您如何访问WordPress REST API?

    要访问WP-REST API,您需要通过命令行访问您的站点。对于WordPress,这称为WP-CLI。您不会通过管理屏幕或直接访问您网站上的代码来执行任何这些操作。

    让我们来看看你是如何开始的。

    通过WP-CLI 访问WP-REST

    WP-CLI是WordPress命令行界面。它允许您通过计算机上的命令行界面 (CLI) 访问和使用WordPress。

    要访问CLI,请在Mac或Linux中打开终端,或在Windows中打开命令提示符。

    WordPress REST API入门基础知识点-1
    Mac上的终端

    要访问远程站点,您需要SSH到您的服务器以通过WP-CLI访问它(无法通过SSH连接?了解如何修复SSH“连接被拒绝”错误)。

    要访问本地站点,您只需从命令行使用正确的目录结构。在实际站点上试用REST API之前,最好先在本地测试站点上试用REST API。

    您需要专门访问您网站的REST API,如下所示:

    http://yoursite.com/wp-json/wp/v2

    然后,您可以在此之后添加元素以访问某些类型的数据,我们稍后将更详细地介绍这些数据。这些元素称为端点。

    验证

    访问站点后,您可能需要进行身份验证。一些端点是公共的,不需要身份验证,而其他端点则需要。

    您不是在此处登录站点管理员:REST API的处理方式略有不同。

    为了能够通过WP-CLI对您的站点进行身份验证,您需要安装一个身份验证插件。对于开发安装,Basic Auth插件可以完成这项工作并且很容易使用。

    但是,对于实时站点,您应该使用更强大的身份验证形式,例如JWT身份验证插件,它使用JSON Web Token并且更安全。

    然后,您可以使用命令行访问数据并包括身份验证。

    下面的示例curl用于测试与WordPress的连接。它将输出一个草稿列表。

    curl -X GET --user username:password -i http://yoursite.com/wp-json/wp/v2/posts?status=draft

    草稿帖子不是公开信息,因此您需要进行身份验证才能访问它们。但是,如果您要查找公开数据,则不需要身份验证。因此,要检索已发布的文章列表,您可以使用:

    curl -X GET http://yoursite.com/wp-json/wp/v2/posts

    这将获取所有已发布的文章,因为这些帖子是公开的。

    WordPress REST API命令概述

    我们现在将把所有这些理论付诸实践,并向您展示一些非常基本的示例,说明您可以使用REST API做什么。这只是一种尝试,以帮助您习惯使用REST API来处理对WordPress的请求。有关更多示例,我们建议您查看官方参考库REST API资源

    以下技术将要求您使用命令行来处理JSON请求。这使您能够通过使用基于文本的界面和发送简单的命令与您的 WordPress 站点进行交互。如果您没有任何使用命令行的经验,我们建议您先花一些时间学习基础知识。您可能还想使用SSH来创建与您的站点的连接。

    最后,当您准备好时,让我们看一些有关如何使用WordPress REST API的示例!

    一旦您访问了您的站点并且您知道如何使用身份验证(以及您是否需要),您将需要使用一系列命令中的一个来与您的站点进行交互。

    您需要使用的命令是:

    • GET 检索资源,例如文章或其他一些数据。
    • POST 向服务器添加资源,例如文章、附件或其他资源。
    • PUT 可用于编辑或更新服务器上已有的资源。
    • DELETE从服务器中删除资源。小心使用!

    让我们依次来看看其中的每一个。

    Get

    GET命令可能是最常用的:它检索数据。下面的示例(您在成功访问您的网站后使用)将获取您网站中所有已发布页面的列表:

    GET http://yoursite.com/wp-json/wp/v2/posts/?status=published

    请注意,我没有在上面的行中包含您站点的完整路径,因为您已经使用WP-CLI访问了该路径。

    检索到该数据后,您可以使用它来通知您的下一步。您可以删除其中一个文章,对其进行编辑或更新。您可以简单地将帖子输出到您的网络应用程序。

    假设您想获取最新的文章。你会用这个:

    GET http://yoursite.com/wp-json/wp/v2/posts/?per_page=1

    在处理文章时,您可以使用许多参数。有关更多信息,请参阅WordPress REST API 手册

    Post

    POST用于向您的站点添加新数据或资源。

    因此,例如,如果您想创建一个文章,您可以使用以下POST命令开始:

    POST http://yoursite.com/wp-json/wp/v2/posts/

    这将创建一个新的空草稿文章。

    然后,您可以通过使用PUT命令进行编辑来更新文章。

    使用POST命令,您还可以添加文章以外的其他资源,包括附件和其他文章类型。

    要将页面添加到您的站点,您可以使用以下方法:

    POST http://yoursite.com/wp-json/wp/v2/posts/pages

    这会以与创建空文章相同的方式创建一个空页面。

    Put

    PUT命令允许您编辑现有资源,包括文章。

    假设您的网站上有许多草稿文章。您想检查它们并更新其中一个以使其发布。

    您可以首先获取所有草稿文章的列表:

    POST http://yoursite.com/wp-json/wp/v2/posts/?status="draft"

    系统将为您提供所有当前草稿文章的列表。您可以使用其ID更改其中之一的状态:

    PUT http://yoursite.com/wp-json/wp/v2/posts/567

    这将访问该文章并允许您对其进行编辑。然后,您可以使用status参数更改其状态:

    {
    "status" = "publish"
    }

    或者您可以向文章添加内容并发布它:

    {
    "status" = "publish"
    "content" = "content here"
    }

    服务器将返回一个200 - OK状态,告诉您PUT请求已成功编辑文章。

    DELETE

    DELETE命令执行您所期望的操作:它删除一个资源。默认情况下,如果您使用它来删除文章,它会将其放入垃圾箱,而不是永久删除。

    因此,如果您想将刚刚创建的文章移至垃圾箱,您可以使用以下命令:

    DELETE http://yoursite.com/wp-json/wp/v2/posts/567

    但是,如果您想绕过垃圾箱并永久删除它,您可以使用以下force参数:

    DELETE http://yoursite.com/wp-json/wp/v2/posts/567?force=true

    这将永久删除文章,无法撤消,因此应谨慎使用。

    一些例子

    1. 从站点返回文章

    虽然您显然需要适当的授权来编辑站点,但几乎可以从任何 WordPress 站点检索一些信息。这是因为REST API在所有WordPress安装中都是一致的。

    正如我们所讨论的,API存在的一个主要原因是使外部应用程序能够访问您的某些数据。在此示例中,我们可以从官方WordPress新闻博客中检索单个文章

    curl https://wordpress.org/news/wp-json/wp/v2/posts/1
    curl https://wordpress.org/news/wp-json/wp/v2/posts/1
    curl https://wordpress.org/news/wp-json/wp/v2/posts/1

    ID已设置为1,这意味着此请求将检索博客上的第一篇文章。可能很难看到,因为JSON不是很可读,但是在代码中,您可以找到文章的所有内容和元数据。

    JSON数据示例

    然后,您可以在应用程序中使用此信息,例如,使用您自己的自定义样式来显示它。

    如果您想返回博客中的每篇文章,您所要做的就是删除末尾的ID。但是,您更有可能希望返回选定数量的帖子。以下请求将返回最新的三个文章:

    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3
    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3
    curl https://wordpress.org/news/wp-json/wp/v2/posts/?per_page=3

    您可以在其他网站甚至您自己的博客上亲自尝试。

    2. 更新文章

    现在,让我们尝试使用REST API对WordPress进行一些更改。为此,您需要登录到要管理的站点。例如,如果您使用SSH,则需要登录到您的服务器。

    在这个例子中,我们将更新一个现有的文章。首先,让我们使用一个请求来更新ID为1的文章的标题:

    curl -X POST http://example.com/wp-json/wp/v2/posts/1 -d ‘{“title”:”A Brand New Title”}’
    curl -X POST http://example.com/wp-json/wp/v2/posts/1 -d ‘{“title”:”A Brand New Title”}’
    curl -X POST http://example.com/wp-json/wp/v2/posts/1 -d '{"title":"A Brand New Title"}'

    这是不言自明的。title参数表明您正在更新文章的标题,后跟包含替换内容的文本字符串。

    还有很多其他的参数,你可以用它来进行更改后。例如,您可以使用列表为文章分配类别、发布文章或完全更改其内容。

    3. 删除用户

    最后,让我们看看如何使用REST API删除数据。在此示例中,我们将从站点中删除用户。当然,您需要先登录并授权管理用户,然后才能使用此功能。

    然后,您可以使用以下请求删除ID为101的用户:

    curl -X DELETE http://example.com/wp-json/wp/v2/users/101
    curl -X DELETE http://example.com/wp-json/wp/v2/users/101
    curl -X DELETE http://example.com/wp-json/wp/v2/users/101

    这将从站点中删除指定的用户。您可以使用附加参数根据用户的ID将用户的文章重新分配给另一个用户,或者强制永久删除而不是将用户添加到垃圾箱。

    通过这些示例,您可以开始了解REST API如何使您能够管理站点上的内容并连接到其他站点。如果您想了解更多信息,我们建议您深入研究REST API手册,并查看有关学习JSON的课程

    何时不使用WordPress REST API

    WordPress REST API并不总是开发网站或应用程序的正确方法。在使用它进行开发之前,您应该注意以下一些注意事项:

    兼容性

    如果您的应用程序将在不运行JavaScript的设备上或由可能关闭它的用户使用,那么如果您使用的是REST API,它就不会运行。

    用PHP编码的WordPress站点将输出HTML,因此不会遇到此问题。不使用JavaScript的设备越来越少,但如果您专门为这些设备开发,REST API将无法工作。

    同样,如果您的用户可能会关闭JavaScript,那么使用REST API会导致问题。出于可访问性或安全原因,某些用户会在其浏览器中关闭JavaScript。

    无障碍

    使用JavaScript开发的站点或应用程序并不总是像HTML输出那样易于访问。

    这主要是因为JavaScript用于传递动态内容的方式可能无法与屏幕阅读器很好地配合使用,并且可能会给视力障碍或光敏性癫痫患者带来问题。

    使用REST API访问您的WordPress站点并以可访问的形式输出数据意味着您可以克服这些问题,但在开发站点时检查站点的可访问性是值得的。

    搜索引擎优化

    频繁刷新的单页应用程序有时会导致SEO问题。这是因为第一次输出页面时未交付的内容可能不会被搜索引擎索引。

    谷歌和其他搜索引擎正在迎头赶上这样一个事实,即现在许多网站都由SPA驱动,并且正在适当地将它们编入索引。但是,对您使用REST API开发的任何站点进行彻底的SEO审核确实值得。

    如何禁用WordPress REST API

    如果您不希望应用程序能够使用REST API从您的站点访问数据,您可以禁用它。请记住,任何人都可以访问公共数据,而不仅仅是您。

    为此,您可以安装Disable WP REST API插件。这将为未登录到您的站点的任何人禁用REST API。

    禁用WP REST API插件

    禁用WP REST API插件

    或者,您可以向主题的函数文件中添加一些代码或编写自己的插件。最好编写一个插件,因为这不是特定于主题的功能。

    在您的插件中,只添加两行:

    add_filter( ‘json_enabled’, ‘__return_false’ );
    add_filter( ‘json_jsonp_enabled’, ‘__return_false’ );
    add_filter( ‘json_enabled’, ‘__return_false’ );
    add_filter( ‘json_jsonp_enabled’, ‘__return_false’ );
    add_filter( 'json_enabled', '__return_false' );
    add_filter( 'json_jsonp_enabled', '__return_false' );
    

    这将完全禁用您站点的REST API。它可能会对您的管理屏幕产生连锁反应,因此请确保添加后一切正常。

    使用WordPress REST API的实际应用程序

    REST API为WordPress的未来提供了一些令人兴奋的可能性。以下是使用WordPress REST API创建SPA或将WordPress链接到其他站点和技术的应用程序和站点的一些示例。

    WordPress.com

    WordPress.com界面

    WordPress.com界面

    WordPress.com管理屏幕完全使用REST API构建,以提供用户与之交互以管理其站点的SPA。

    这使得界面和服务器之间的动态通信成为可能,并导致WordPress.org可能及时模仿的用户友好界面。

    区块编辑器(古腾堡)

    古腾堡编辑器

    古腾堡编辑器

    同样在WordPress管理屏幕中,但这次也在自托管WordPress中,Gutenberg区块编辑器使用REST API与您的数据库进行通信并创建块。

    要使文章类型与Gutenberg编辑器一起使用,它们必须启用REST API。这意味着,如果您要注册自定义文章类型并使用Gutenberg,则需要添加以下行以启用该文章类型的区块编辑器:

    “show_in_rest” = true;
    “show_in_rest” = true;
    "show_in_rest" = true;

    Event Espresso

    Event Espresso

    Event Espresso

    Event Espresso是一个WordPress插件,可让用户组织和宣传活动。它利用REST API,以便用户可以从WordPress外部访问其中的数据。这意味着您可以构建移动应用程序或SPA来管理您的活动。

    UsTwo

    UsTwo

    UsTwo

    UsTwo是一家数字机构,其网站是使用REST API作为单页应用程序构建的。这结合了使用React构建的前端和由WordPress提供支持的后端。

    他们的单个页面的内容是模块化的,其结构与标准的WordPress页面不同。为了完成这项工作,他们使用了一个自定义页面构建器插件,让他们的团队可以向站点添加模块化内容。

  • 如何开发一款WordPress子主题

    如何开发一款WordPress子主题

    您已经运行WordPress网站一段时间了,它一直在做您需要做的事情。但是现在,您决定需要对其进行自定义。

    或者,您可能正在使用从主题目录下载的主题或已购买的主题创建站点,但您意识到它不能完全按照您的需要运行。

    那你怎么办呢?

    您可以找到一个插件来提供您需要的自定义或切换到新主题。但是,如果您对当前的主题感到满意并且找不到可以添加您需要的功能的插件怎么办?

    答:您需要自定义您的主题。最佳实践说:您通过(WordPress)子主题来做到这一点。

    在本教程中,我们将更多地讨论子主题是什么以及它是如何工作的。我们还将带您完成从头开始创建主题的过程,并向您展示如何将修改后的主题变成子主题。

    修改现有主题是开始WordPress开发的好方法。更改的结果将很容易看到和理解。但是,直接对活动主题进行编辑可能会导致问题,因为即使是一个小错误也可能导致主题无法使用。每当主题更新时,您所做的所有更改也将丢失。

    然而,有一种方法可以避免这些问题,那就是创建“子主题”。子主题的工作方式与任何其他WordPress主题大致相同,不同之处在于它使用现有主题作为基础(或“父”)。您对子主题所做的更改将反映在您的站点上,而无需直接更改父主题。

    1. 自定义WordPress的方法
    2. 什么是WordPress子主题?
    3. 何时在WordPress中使用子主题(优点)
    4. 何时不使用WordPress子主题(缺点)
    5. 如何创建WordPress子主题
    6. 如何激活WordPress子主题
    7. 如何在WordPress中自定义您的子主题
    8. 如何对子主题和父主题进行故障排除
    9. 使用WordPress子主题时的有用提示

    自定义WordPress的方法

    自定义主题有风险。如果您在第三方主题(例如您从市场上购买的主题)中编辑代码,那么当您下次更新主题时,您所做的所有更改都将丢失。这意味着您的网站不仅会恢复原状,而且您的所有工作都被浪费了。

    可以通过三种方式自定义您的WordPress网站:

    • 直接编辑您的主题。
    • 安装插件。
    • 创建当前主题的子主题。

    让我们依次来看看其中的每一个。

    编辑您的主题

    如果您的网站运行自定义WordPress主题,这意味着它是专门为您的网站开发的,您可以选择安全地编辑它,因为下次更新主题时不会丢失您的自定义设置。

    相反,如果您或您的开发人员将来对主题进行更改,您将编辑的是主题的自定义版本,而不是更改之前的原始版本。

    这并不意味着编辑您的主题并非没有风险。如果您没有编写主题的经验,创建子主题可能仍然更安全(我们稍后会看到如何)。这是我做的事情:我有一个基本主题,我在我所有的网站上使用,具有标准布局、钩子和函数,然后我在每个网站上使用子主题对其进行自定义。

    如果您直接编辑主题,请确保保留原始主题的备份,不要在实时站点中编辑主题(改用开发或临时站点),并使用版本控制来跟踪您的更改。

    如果您使用的是第三方主题,则永远不要直接编辑它。相反,使用插件或创建子主题。

    添加插件

    自定义WordPress主题的第二个选项是安装或编写插件。

    如果您要进行的自定义是功能性的而不是与设计相关的,那么插件是一种更合适的方法。所以如果你想添加额外的代码,最好还是创建一个插件。

    插件不必很大或很复杂:如果您需要向主题中的functions.php文件添加额外的代码,请创建一个简单的插件来向您的站点添加几行代码。一个很好的例子是注册自定义文章类型

    将代码添加到主题的functions.php可能很诱人,但添加帖子类型是对网站的功能更改,而不是设计更改。如果您以后要切换主题,您不会希望丢失这些帖子类型以及您使用它们创建的所有帖子。这就是为什么您应该安装或创建插件的原因。

    有时您可以找到一个现有的插件来满足您的需求,但有时您可能需要自己编写插件代码。

    WordPress插件库

    WordPress插件库

    如果对是否应该创建插件或自定义主题(或子主题)有疑问,请问自己:如果我想在将来更改网站的设计并安装新的WordPress主题,我是否希望保留此更改? 如果答案是肯定的,这意味着更改是功能性的而不是美学的,它应该包含在插件中。

    创建子主题

    自定义WordPress主题的第三个选项是创建子主题

    以下是您使用子主题的一些场景:

    • 您希望更改网站的设计,而不是功能。
    • 您的网站正在运行第三方主题或您想在当前状态下再次使用的主题。
    • 您不想直接编辑现有主题,以防它引起问题(可能您不是经验丰富的主题开发人员)。
    • 您的站点正在运行一个设计为父主题的主题,例如框架主题。这些主题具有许多自定义选项,例如hooks,专为您添加到您自己的子主题而设计。

    因此,子主题是一种向您的网站添加自定义内容的有效且安全的方式。因此,让我们更深入地了解它们。

    什么是WordPress子主题?

    WordPress主题目录

    那么,WordPress中的子主题究竟是什么?它是如何工作的?

    子主题是与另一个主题协同工作的主题,称为父主题

    它包含一些特定的说明来告诉WordPress这是一个子主题以及父主题是什么。WordPress 然后在大多数情况下使用来自父主题的代码,但会使用来自子主题的代码(如有必要)覆盖它。

    在许多方面,子主题的功能就像一个“正常”的WordPress主题。它以相同的方式安装、启用和配置。子主题的独特之处在于它依赖于另一个主题来确定其大部分内容。另一个主题被称为“父主题”。

    WordPress将始终优先考虑子主题的设置。因此,你能想到的子主题为坐在前面的家长。如果子主题中的设置覆盖了父主题中的匹配设置,则子主题优先。这使您可以仅更改要更改的主题部分,其他所有内容都由现有父级处理。

    例如,大多数父主题包含定义不同标题文本级别的样式,例如h1、h2、h3、h4等。假设父主题将h1字体大小定义为20px,但子主题指定与32px相同的标题。在这种情况下,WordPress会将后一种样式应用于所有h1文本。但是,如果同一个子主题不包含h2、h3 和 h4 的特殊样式说明,则仍将应用父主题定义的样式。

    如果您可以直接编辑主题,您可能想知道为什么子主题值得麻烦。使用子主题实际上有很多优点,因为它:

    • 使您能够更新父主题。您应该始终保持网站的各个方面都是最新的。但是,如果您编辑了父主题,则更新后所有更改都将丢失。
    • 可以轻松找到您所做的更改。发现您进行更改的每个实例可能很困难。使用子主题使您的添加内容更加清晰。
    • 避免直接编辑父主题的风险。如果您在处理主题时出错,或者您对所做的修改不满意,您可以轻松回滚到原始主题。

    WordPress子主题中的文件

    每个WordPress子主题必须至少有两个文件:样式表和函数文件。样式表将在顶部包含注释掉的文本,告诉WordPress这是一个子主题以及父主题是什么。函数文件将包含一个函数,该函数将来自父主题的样式表排入队列

    注意:您可能会遇到一些指南,告诉您从子主题的样式表调用父主题样式表。这不再是正确的方法,您应该在函数文件中使用排队。我很快就会告诉你如何做到这一点。

    你的子主题并不必须 包含的任何其他文件。与父主题不同,如果主题中没有更多特定文件,它不需要index.php文件作为后备。这是因为如果子主题中不存在模板文件,WordPress将使用父主题中的文件。

    因此,根据您希望子主题执行的操作,您可以向样式表、函数文件中添加额外的代码,或者在子主题中创建额外的文件以覆盖父主题。这些可能包括以下一项或多项:

    • 模板文件覆盖父主题中的相同文件,例如page.php当您要自定义静态页面的显示时。
    • 当您想要自定义站点设计的这些部分时,模板部分例如header.php或footer.php。
    • 您从子主题中的模板文件调用的额外模板部分。因此,如果您想在显示静态页面时自定义页眉,您可以在子主题中创建一个名为header-page.php的文件和一个名为page.php的模板文件,该文件将覆盖父主题中的page.php . 这个模板文件将与父主题中的模板文件相同,除了头文件的调用,它会调用header-page.php 而不是header.php。
    • 用于功能的额外包含文件。如果您想添加大量函数代码并对其进行组织,您可以为每组函数创建包含文件,然后在您的子主题的functions.php文件中调用它们。因此,例如,如果您想添加额外的定制器选项,您可以在您的子主题中添加一个名为customr.php的包含文件,然后从您的子主题中的函数文件中调用该文件。

    但是,如果您确实添加了额外的文件和功能,WordPress怎么知道该使用哪个呢?来自父主题的那些还是来自子主题的那些?这就是我们接下来要讲的。

    WordPress如何选择模板文件

    WordPress在您的站点上显示内容时从您的主题中选择模板文件的方式是参考模板层次结构

    WordPress模板层次结构

    WordPress模板层次结构

    WordPress使用此层次结构来处理主题中的模板文件,并在显示给定类型的内容时找到要使用的正确模板文件。它将从顶部开始(在上图中的左侧)并依次查找给定内容类型的每个文件。当它找到将显示该内容的文件时,它将使用它。

    假设您的主题有一个archive.php文件和一个category.php文件,但没有tag.php文件。显示类别档案时,WordPress将使用category.php,因为它更特定于内容类型。当显示标签档案时,它将使用archive.php代替。

    如果WordPress没有为给定的内容类型找到模板文件,它会默认为包罗万象的index.php文件,这就是为什么每个独立主题(即不是子主题)都必须有一个index.php文件的原因.

    这同样适用于单个文章和页面。假设您的主题有一个single.php文件,它是任何文章类型(包括页面和自定义帖子类型)的单个帖子的统称。它还有一个page.php文件。当显示单个页面时,它将使用page.php。显示文章时,它将使用singular.php。如果您注册自定义文章类型并且不为该帖子类型添加模板文件,它将再次使用singular.php。

    当您使用子主题时,WordPress仍然使用模板层次结构来决定在您的站点上输出内容时使用哪个文件。它查看父主题和子主题中的文件并使用它遇到的第一个文件。

    所以想象你的子主题有singular.php和post.php,你的父主题有page.php和index.php。输出单个文章时,WordPress将使用子主题中的post.php。输出页面时,它将使用父主题中的page.php。当输出自定义帖子类型的单个帖子时,它将使用来自子主题的single.php。

    但是,如果您的子主题和父主题都有相同文件的实例怎么办?

    假设您将page.php文件添加到上一个示例中的子主题。因为该主题位于子主题中,所以它会覆盖父主题中的相同文件。因此,当显示单个页面时,WordPress将使用来自子主题的新page.php文件。

    这就是为什么创建子主题可以让您自定义父主题。如果您将父主题中的模板文件副本添加到子主题,然后对其进行编辑以包含您要进行的自定义,WordPress将使用这个新模板文件,而不是来自父主题的模板文件。这意味着您的自定义将在显示内容时使用,而无需您编辑父主题。好的!

    WordPress如何从父主题和子主题运行函数

    如果您不想对主题中的模板文件进行自定义,而是对功能进行自定义,该怎么办?

    你也可以这样做。首先,您需要让自己满意,这样做的正确方法是通过子主题而不是插件。一个示例可能是您想要编辑父主题中已有的函数,例如,在页脚中输出版权页的函数。

    然后将新函数添加到子主题中的函数文件,或添加到从函数文件调用的包含文件。

    为确保您的新函数覆盖父主题的功能,您需要了解如何覆盖函数。有三种方法可以做到这一点:

    • 通过在父主题中编写一个与可插入函数同名的新函数。
    • 通过将父主题中的函数从它所附加的钩子中解开,然后编写一个新函数来替换它。
    • 通过编写一个比原始函数具有更高优先级的新函数并通过相同的钩子调用它,这意味着它在原始函数之后被调用,因此可以覆盖或增加它。

    我们将在本文稍后介绍您如何执行所有这些操作。但首先,让我们看一下您何时会使用和不会使用子主题的场景。

    何时在WordPress中使用子主题(优点)

    您现在知道什么是子主题以及如何使用它们来覆盖父主题中的模板文件或函数。

    简要回顾一下,如果您在网站上运行主题并且想要执行以下一项或多项操作,则应使用子主题:

    • 编辑一个或多个模板文件。
    • 添加与显示而非功能相关的额外功能。
    • 覆盖父主题中的一个或多个函数。
    • 添加额外的模板文件。

    一些优点包括:

    • 易于扩展和定制:很明显,子主题扩展了其父主题的功能。您已经有一个父主题形式的现成模板,您需要做的就是为您的子主题创建一个单独的style.css文件,并根据您的需要添加自定义调整。
    • 轻松更新:随着 WordPress 的发展,主题和插件需要经常更新。如果您对主要主题进行自定义调整和更改,如果您更新主题,最终可能会丢失所有更改。因此,建议对子主题进行此类更改,这样即使您需要更新父主题,也不必担心丢失更改。

    当您不使用子主题时呢?

    何时不使用WordPress子主题(缺点)

    有时您不会使用子主题,而应该使用不同的方法来自定义您的网站。这些是:

    • 如果您的主题是您自己开发的(或其他人为您编写的)并且不需要在其他任何地方使用它。只需编辑主题,确保使用版本控制。
    • 如果您要进行的自定义具有功能性,例如添加自定义帖子类型,并且您希望在将来更改主题时保留它们。改用插件。

    一些缺点包括:

    • 选择理想的父主题:并非所有主题都可以作为好父主题!例如,某些WordPress主题可能不会定期更新,因此往往缺乏最新的功能。同样,并非所有WordPress主题都是在考虑子主题的情况下创建的,因此可能不适合父主题。您需要选择完美的父主题,以便正确扩展它并使其成为您子主题的基础。
    • 定制工作:子主题基本上寻求扩展和定制现有模板设计。因此,如果您已经围绕父主题创建了一个网站,则在移动到子主题时,您可能需要重新考虑自定义元素,例如菜单、主题选项、侧边栏、标题等。

    现在您知道何时(以及何时不)使用子主题,是时候开始工作并学习如何在WordPress中创建子主题了。

    现在您知道为什么应该使用子主题,现在是创建一个的时候了。这个过程有点复杂,但我们将引导您完成每一步。

    如何创建WordPress子主题

    在创建子主题之前,您需要做一些准备工作。首先,在执行任何其他操作之前创建站点备份非常重要。这样,您就可以处理您的主题,而不必担心破坏您的网站或丢失其任何内容。事实上,最好使用临时站点来编辑和测试您的主题,而不是您的实时站点。

    我们还建议您在开始之前熟悉CSS和PHP。虽然您不需要任何使用这些语言创建子主题的经验,但它肯定有助于编辑主题的过程。花时间了解这些关键语言的基础知识将使您有一个良好的开端。

    在WordPress中设置一个基本的子主题涉及创建两个文件:样式表函数文件

    Step 1:为您的子主题创建一个文件夹

    您需要的第一件事是为您的孩子主题生活的地方。但是,在此之前,您需要一种直接处理站点文件的方法。这通常意味着使用像FileZilla这样的SFTP解决方案来访问您的站点。

    FileZilla界面

    一旦你安装和设置FileZilla中,您可以使用登录你的虚拟主机提供的凭据。完成后,您将看到整个站点组织成一系列文件夹和文件。从这里,您需要导航到/wp-content/themes/,这是所有主题所在的位置。

    WordPress主题目录

    右键单击此文件夹内的任意位置,然后选择创建目录。此文件夹将保存您的子主题,因此我们建议您以其父主题命名。例如,一个二〇一七的子主题可能被称为twentyseventeen-child。

    WordPress子主题目录

    保存文件夹后,就可以开始向子主题添加内容了。

    Step 2:创建样式表

    层叠样式表 (CSS)是一种定义HTML内容外观的语言。主题的CSS文件控制您网站上的文本、图像、超链接和大多数其他内容的外观。当我们谈论更改主题的外观时,我们通常谈论的是编辑其CSS。

    这听起来可能很复杂,而且CSS确实为您提供了很多自定义选项。但是,现在您无需担心具体细节。您需要做的就是创建CSS文件本身。您将在刚刚创建的子主题文件夹中执行此操作。只需打开文件夹,右键单击其中的任意位置,然后选择创建新文件。

    主题CSS样式

    当您被要求命名文件时,将其命名为style.css,注意使用确切的大小写和拼写(因为WordPress否则将无法识别该文件)。

    创建子主题CSS样式文件

    该文件自然是空的,因此您需要为其提供一些内容。要开始编辑文件,请右键单击它并选择查看/编辑。这将在您的默认文本编辑程序中打开文件,例如TextEdit或记事本。

    空白CSS文件

    在创建文件之前,您需要创建一个文件夹来保存您的主题。这在WordPress安装的wp-content/themes文件中。

    在新主题的文件夹中,创建一个名为style.css的文件。添加以下内容:

    /*
    Theme Name: My Child Theme. Child for Twenty Nineteen.
    Theme URI: https://rachelmccollin.com
    Description: Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
    Author: Rachel McCollin
    Textdomain: mccollin
    Author URI: https://rachelmccollin.com/
    Template: twentynineteen
    Version: 1.0
    License: GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    */
    /*
    Theme Name: My Child Theme. Child for Twenty Nineteen.
    Theme URI: https://rachelmccollin.com
    Description: Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
    Author: Rachel McCollin
    Textdomain: mccollin
    Author URI: https://rachelmccollin.com/
    Template: twentynineteen
    Version: 1.0
    License: GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    */
    /*
    Theme Name:  My Child Theme. Child for Twenty Nineteen.
    Theme URI:  https://rachelmccollin.com
    Description:  Theme to support tutsplus tutorial. Child theme for the Twenty Nineteen theme.
    Author:  Rachel McCollin
    Textdomain:  mccollin
    Author URI:  https://rachelmccollin.com/
    Template:  twentynineteen
    Version:  1.0
    License:  GNU General Public License v2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html                 
    */

    这段文字被注释掉了。它不是在您的网站上运行任何东西或提供任何功能的代码。相反,它会告诉WordPress主题。每个主题中都需要这样的文本,否则WordPress无法将其识别为主题。

    让我们通过每一行来确定它们的作用:

    • Theme Name:主题的唯一名称。
    • Theme URI:用户可以在其中找到主题的代码或文档。
    • Description:帮助用户理解主题的描述性文字。
    • Author:你的名字
    • Textdomain:用于国际化。在任何国际化函数中使用文本域作为第二个参数。
    • Author URI:作者的网站。
    • Template:存储父主题的文件夹。使用文件夹名称而不是主题名称。没有这一行,您的主题将无法作为子主题使用。
    • Version:版本号
    • License:许可证,必须是GNU。[关联]
    • License URI:许可证信息的链接。

    子主题最重要的一行是Template: 行。没有这个,主题将不能作为子主题工作。只有子主题将包含此行。

    将此添加到您主题的样式表中,对其进行编辑以添加您自己的详细信息而不是我的。您需要编辑Template: 行以添加存储现有主题的文件夹,因为这将是您的父主题。

    现在保存文件。如果您现在查看站点中的主题详细信息屏幕,您会看到显示的所有内容:

    WordPress中没有截图的主题页面

    WordPress中没有截图的主题页面

    这看起来不太好,因为没有截屏。这是一张图像,可以让您了解主题的外观。除非您的主题看起来与父主题非常不同,否则只需将screenshot.png文件从您的父主题复制到您的子主题。

    带有屏幕截图的WordPress中的主题页面

    带有屏幕截图的WordPress中的主题页面

    Step 3:引用父主题

    到目前为止,您的主题已经有了一个主页和一些基本信息。现在,是时候给它一些功能了。您可以通过创建一个函数文件来做到这一点。除其他外,此文件决定了主题的独特功能。这是一个功能强大的工具,用途广泛,但现在,您只需要创建它。

    下一步是将函数文件添加到您的子主题。您需要它,以便您可以将来自父主题的样式表排入队列。没有它,您的网站将根本没有样式,看起来像这样:

    我们的主页没有CSS

    我们的主页没有CSS

    不好,我相信你会同意的!因此,让我们添加样式以使其看起来应该如此。

    在您的子主题文件夹中,添加一个名为functions.php的文件。打开它并添加以下代码:

    <?php
    /* enqueue script for parent theme stylesheeet */
    function childtheme_parent_styles() {
    // enqueue style
    wp_enqueue_style( ‘parent’, get_template_directory_uri().‘/style.css’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘childtheme_parent_styles’);
    <?php
    /* enqueue script for parent theme stylesheeet */
    function childtheme_parent_styles() {
    // enqueue style
    wp_enqueue_style( ‘parent’, get_template_directory_uri().’/style.css’ );
    }
    add_action( ‘wp_enqueue_scripts’, ‘childtheme_parent_styles’);
    <?php
    /* enqueue script for parent theme stylesheeet */        
    function childtheme_parent_styles() {
    // enqueue style
    wp_enqueue_style( 'parent', get_template_directory_uri().'/style.css' );                       
    }
    add_action( 'wp_enqueue_scripts', 'childtheme_parent_styles');

    它使用wp_enqueue_style()函数将来自父主题的样式表排入队列,get_template_directory_uri()函数定位该文件的存储位置。该函数位于我创建的一个名为wbolt_parent_styles()的函数中,与wp_enqueue_scripts钩子挂钩。

    您可能想知道为什么它使用名为wp_enqueue_scripts而不是的函数wp_enqueue_styles。这是因为wp_enqueue_scripts用于脚本和样式,并且没有像wp_enqueue_styles.

    随意编辑我的代码,将您自己的前缀添加到您的函数名称中。我使用“childtheme”作为前缀,以确保我的函数不会与来自父主题或任何插件的任何其他函数发生冲突。

    现在保存您的文件。

    Step 4:启用子主题

    您的子主题现在可以使用了,所以您需要做的就是启用它。最简单的方法是通过WordPress管理界面。只需登录,然后访问外观>主题。您应该已经在此处看到您的子主题:

    启用子主题

    此时,您只需要单击“启用”即可启用您的主题。当然,此时您可能不会注意到您的站点有任何差异。这是因为您实际上还没有添加任何自定义。子主题仍然是一张白纸,等着你把它变成特别的东西。

    正如我们之前提到的,您现在应该花一些时间来了解有关CSSPHP的更多信息。这将使您能够使用内置主题编辑器通过子主题向您的站点添加新样式和功能。如果你想扩展您的主题的功能,它也是一个聪明的想法,详细了解functions.php的文件。只需稍加努力,您就可以使用全新的子主题对 WordPress 网站进行任何您想要的更改!

    如何激活WordPress子主题

    一旦您的子主题准备就绪,您就需要激活它。如果您担心激活子主题会关闭父主题,请不要担心:WordPress会知道使用父主题中的文件,除非您向子主题添加新文件来覆盖它们。到目前为止,您还没有向子主题添加任何额外的文件或功能,因此您的站点的工作方式与激活父主题时完全相同。

    请记住:首先在您的开发或临时站点上执行此操作。在您测试之前,不要在您的实时站点上激活您的子主题。

    在WordPress管理中,转到外观 > 主题。您会发现您的子主题列在您网站上安装的主题中。

    将鼠标悬停在主题上,然后单击“激活” 按钮。这将激活您的子主题。现在,当您访问您的实时站点时,它看起来和以前一样:

    网站首页

    网站首页

    它看起来相同,因为您尚未添加任何自定义。但是你现在有一个工作子主题。做得好!

    如何在WordPress中自定义子主题

    现在您的WordPress网站有了一个可用的子主题,是时候添加您的自定义设置了。在这里,我将向您展示如何添加模板文件以覆盖父主题上的模板文件、如何为子主题添加样式以及如何添加新功能。

    让我们从模板文件开始。

    如何将模板文件添加到您的WordPress子主题

    我们已经了解了WordPress在您的网站上显示内容时如何选择要使用的模板文件。有两件事要记住:

    • WordPress将使用层次结构中最先出现的文件,无论是来自子主题还是父主题。
    • 如果父主题和子主题中都存在同名的模板文件(或模板部分,例如header.php),WordPress将使用子主题中的一个。

    要添加自定义,我发现首先从父主题制作相关文件的副本,将其添加到子主题,然后编辑它更容易。

    这适用于您的子主题中的文件是否与父主题中的命名文件相同,或者它是用于显示不同内容类型的新文件,还是层次结构中更高的文件。

    因此,如果我将新版本的page.php添加到我的子主题中,这将覆盖我父主题中的page.php,我会将page.php从我的父主题复制到我的子主题,然后对其进行编辑。确保复制文件:不要移动它,因为您不想对父主题进行任何更改。

    例如,如果我想要在我的子主题中使用自定义页面模板,我会将page.php复制到我的子主题,重命名它,然后对其进行编辑。

    这样,您可以确保不需要自定义的文件的所有方面仍然可以正常工作。这同样适用于模板部件。

    如何为您的WordPress子主题添加样式

    您还可以向子主题的style.css文件添加样式,这将增强或覆盖父主题样式表中的样式。

    WordPress将首先从父主题调用样式表,然后从子主题调用样式表。这意味着如果您将样式添加到与父主题中的样式相同的元素的子主题,只要您使用相同的选择器,它就会覆盖父主题的样式。

    因此,假设您想更改站点标题的颜色。在父主题中,这可能是这样的:

    h1.site-title {
    color: #000;
    }
    h1.site-title {
    color: #000;
    }
    h1.site-title {
    color: #000;
    }

    要在您的子主题中覆盖它,您可以添加以下内容:

    h1.site-title {
    color: #303030;
    }
    h1.site-title {
    color: #303030;
    }
    h1.site-title {
    color: #303030;
    }

    由于浏览器会在父主题中的样式之后遇到这个,它将覆盖它并被使用。

    如何为WordPress子主题添加函数

    因此,您在WordPress中创建了子主题并不是因为您想要编辑任何模板文件,而是因为您想要添加额外的功能或覆盖父主题中的一个或多个功能。

    在子主题中编写函数比添加模板文件要复杂一些,但这是可能的。

    如果您想添加一个不与父主题中的任何功能交互的新功能,您可以继续这样做。只需将该函数添加到子主题中的functions.php文件中,将其挂接到相关的操作或过滤器挂钩上,就可以了。

    但是,如果您计划覆盖或编辑父主题中的函数,则需要了解可用于执行此操作的方法。您可以通过三种方式覆盖子主题中的父主题功能:

    • 如果父主题中的主题是可插入的,您只需在子主题中编写另一个具有相同名称的函数,WordPress将运行该函数而不是父主题中的函数。
    • 如果你想完全停止父主题中的函数运行,你可以在你的子主题中编写一个函数,将它从它所附加的钩子中解开。
    • 如果您想扩充一个函数,您可以在您的子主题中添加另一个函数(具有不同的名称),并确保它在父主题中的函数之后运行。

    让我们仔细看看你是如何做到的。

    覆盖可插入函数

    可插拔函数由环绕在它周围的条件检查标识。这将检查是否有另一个同名的函数已经被触发。如果是这样,它不会运行该功能。

    WordPress将在来自父主题的函数之前触发来自您的子主题的函数。如果它在父主题中遇到一个可插拔函数,并且您已向子主题添加了一个同名的函数,则该可插拔函数将不会运行。

    一个示例是在WooCommerce站点的Storefront主题中输出版权页的函数。这是没有内容的函数:

    if ( ! function_exists( ‘storefront_credit’ ) ) {
    function storefront_credit() {
  • WordPress钩子详解:如何使用动作、过滤器和自定义钩子

    WordPress钩子详解:如何使用动作、过滤器和自定义钩子

    WordPress钩子(Hook)是WordPress开发人员的武器库中最重要的工具之一。它们是WordPress插件和主题开发的基础。您可以使用WordPress的许多内置钩子将自定义代码“连接到”WordPress核心,并执行修改某些内容。

    有两种类型的WordPress钩子:ActionsFilters。Hook非常普遍,甚至WordPress Core本身也广泛使用它们。WordPress还提供了一种让您定义自己的自定义钩子的方法,以便其他开发人员可以挂钩到您的代码中。

    了解动作、过滤器和自定义钩子的工作原理对于掌握WordPress开发至关重要。

    本文的前半部分介绍了WordPress钩子的基础知识,并解释了它们如何与多个示例一起工作。在后半部分,您将学习如何使用钩子来自定义WordPress,创建自己的自定义钩子,并使用它们来构建自己的可扩展插件。

    1. 什么是WordPress钩子?
    2. 钩子 vs 动作 vs 过滤器
    3. WordPress钩子如何工作?
    4. 在哪里注册钩子及其函数?
    5. 使用WordPress钩子
    6. WordPress钩子列表和资源
    7. 查找在WordPress页面上注册的钩子
    8. “所有”钩子
    9. WordPress钩子存储在哪里?
    10. 如何创建自定义WordPress钩子
    11. 从WordPress钩子中删除回调函数
    12. 更多WordPress钩子教程

    什么是WordPress钩子?

    一个WordPress的页面是由很多的功能和数据库查询组装。WordPress核心、插件和主题协同工作以输出页面元素,如文本、图像、脚本和样式。完全组装后,浏览器会将它们放在一起并呈现页面。

    WordPress钩子允许您在某些点“钩入”这个构建过程并运行您的自定义代码。钩子的主要功能是让你在不接触核心文件的情况下修改或添加功能到WordPress 。

    钩子将帮助您使用自己的代码扩展WordPress

    钩子将帮助您使用自己的代码扩展WordPress

    WordPress的插件API赋予WordPress钩子的功能。您可以通过在WordPress运行时在特定实例中调用某些称为Hook Functions的WordPress函数来使用钩子。

    使用钩子函数,您可以将自定义代码捆绑在回调函数中,并将其注册到任何钩子中。注册后,此回调将在钩子所在的任何地方运行,允许您增加或替换默认的WordPress功能。

    钩子在代码执行过程中的位置是一个重要的因素。您将在接下来的部分中详细了解其重要性。

    两种类型的WordPress钩子:动作和过滤器

    WordPress包括两种类型的钩子,称为ActionsFilters。动作允许您在WordPress运行时的某些预定义点执行某些操作,而过滤器允许您修改WordPress处理的任何数据并返回这些数据。

    动作Actions)在WordPress代码中定义为:

    do_action( ‘action_name’, [optional_arguments] );
    do_action( ‘action_name’, [optional_arguments] );
    do_action( 'action_name', [optional_arguments] );

    action_name字符串是动作的名称。您可以指定[optional_arguments]变量以将附加参数传递给回调函数。如果未指定此字段,则其默认值将为空。

    示例:do_action( 'wp_head' )每次WordPress处理站点标题时,都可以挂接该动作以运行自定义代码。此动作没有任何其他参数。

    过滤器(Filters)在WordPress代码中定义为:

    apply_filters( ‘filter_name’, ‘value_to_be_filtered’, [optional_arguments] );
    apply_filters( ‘filter_name’, ‘value_to_be_filtered’, [optional_arguments] );
    apply_filters( 'filter_name', 'value_to_be_filtered', [optional_arguments] );

    filter_name字符串是过滤器的名称,value_to_be_filtered变量是被过滤和返回需求,和值[optional_arguments]变量可以通过附加参数,就像动作。

    例如:apply_filters( 'admin_footer_text' , string $text )过滤器可以是钩状来修改在管理页脚显示的文本。从WordPress 5.4开始,其默认值将 在管理区域页脚中显示该句子。Thank you for creating with WordPress.

    稍后您将通过WordPress核心中的许多示例学习如何动作和过滤器钩子。

    上钩后,您可以指导您的代码在您的网站上执行自定义某些内容。例如,您可以使用钩子在发布文章后自动发送电子邮件,或加载自定义样式表来更改站点的外观。

    WordPress挂钩可帮助您与网站互动或修改您的网站

    WordPress钩子可帮助您与网站互动或修改您的网站

    理解钩子的最简单方法是将您的WordPress网站想象成盖房子。

    钩子类似于使用起重机来回移动建筑物品。正在传输的项目是回调函数,其中包括您的自定义代码。这些项目(或功能)可以帮助您建造或改造房屋。

    在WordPress中挂钩“wp_head”操作的示例

    在WordPress中“wp_head”动作钩子的示例

    回调函数可以是常规PHP函数、默认WordPress函数或您定义的自定义函数。

    我们只能在连接到特定挂钩的特定载体上运输某些物品。因此,动作只能与动作函数挂钩同样,过滤器只能与过滤器函数挂钩。

    虽然更换起重机上的吊钩和托架很乏味,但WordPress通过包含超过2,200种默认钩子使其变得非常容易。

    WordPress 5.1有2200多个原生钩子(来源:Adam Brown)

    WordPress 5.1有2200多个原生钩子(来源:Adam Brown)

    您可以找到遍布WordPress核心的钩子,让您可以进入要钩子的确切位置并运行您的自定义代码。

    钩子 vs 动作 vs 过滤器

    根据WordPress插件手册

    钩子是一段代码交互/修改另一段代码的一种方式……钩子有两种类型:动作和过滤器。

    术语HookActionFilter的使用方式存在广泛的不一致。一些教程和指南将它们与与之相关的函数混合在一起。这种混淆存在的一个主要原因是钩子工作方式的复杂性。

    即使您仔细查看WordPress核心内部,您也会发现添加动作和过滤器之间没有太大区别。下面是为ADD_ACTION()函数的源代码wp-includes/plugin.php文件:

    function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
    return add_filter( $tag, $function_to_add, $priority, $accepted_args );
    }
    function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {
    return add_filter( $tag, $function_to_add, $priority, $accepted_args );
    }
    function add_action( $tag, $function_to_add, $priority = 10, $accepted_args = 1 ) {      
    return add_filter( $tag, $function_to_add, $priority, $accepted_args );
    }

    add_action()函数只是调用该add_filter()函数并返回其值。为什么?因为它们从根本上以相同的方式工作,除了一个区别。

    apply_filters()函数返回一个可以更改现有数据类型的值,而该do_action() 函数不返回任何内容(PHP中的NULL值)。

    如果您仍然感到困惑,请不要担心!读完本文的前半部分后,一切就都清楚了。我们将坚持使用官方的WordPress Codex术语,因为它清晰、准确且通用。

    现在,让自己熟悉下面显示的钩子例程。

    钩子程序:钩子、钩子函数和回调函数

    钩子程序:钩子、钩子函数和回调函数

    让我们分解一下Actions和Hooks之间的区别。

    WordPress钩子
    动作 过滤器
    动作用于在WordPress Core执行期间的特定点运行自定义函数。 过滤器用于修改或自定义其他功能使用的数据。
    动作由do_action( ‘action_name’ )WordPress代码中的函数定义/创建。 过滤器由apply_filters( ‘filter_name’, ‘value_to_be_filtered’ )WordPress代码中的函数定义/创建。
    动作也称为动作钩子 过滤器也称为过滤器钩子
    动作只能与动作函数挂钩。例如add_action()remove_action() 过滤器只能与过滤器函数挂钩。例如add_filter()remove_filter()
    动作函数不需要向它们的回调函数传递任何参数。 过滤器函数需要至少传递一个参数给它们的回调函数。
    动作函数可以执行任何类型的任务,包括改变WordPress工作方式的行为。 过滤器函数仅用于修改过滤器传递给它们的数据。
    动作函数应该return没什么。但是,它们可以echo输出或与数据库交互。 过滤器函数必须将return其更改作为输出。即使过滤器函数什么都不改变,它仍然必须return是未修改的输入。
    只要代码有效,动作几乎可以执行任何操作。 过滤器应该以孤立的方式工作,因此它们不会产生任何意外的副作用。
    总结:一个动作会中断常规的代码执行过程,用它接收到的信息做一些事情,但什么都不返回,然后退出。 总结:过滤器修改它接收到的信息,将其返回给调用钩子函数,其他函数可以使用它返回的值。

     

    有时,您可以使用动作或过滤器来实现相同的目标。例如,如果您想修改文章中的文本,您可以使用publish_post动作注册一个回调函数,并在将文章内容保存到数据库时更改文章内容。

    // define the callback function to change the text
    function change_text_callback() {
    // add the code to change text here
    }
    // hook in to the ‘publish_post’ action with the add_action() function
    add_action( ‘publish_post’, ‘change_text_callback’ );
    // define the callback function to change the text
    function change_text_callback() {
    // add the code to change text here
    }
    // hook in to the ‘publish_post’ action with the add_action() function
    add_action( ‘publish_post’, ‘change_text_callback’ );
    // define the callback function to change the text
    function change_text_callback() { 
    // add the code to change text here
    }
    // hook in to the 'publish_post' action with the add_action() function
    add_action( 'publish_post', 'change_text_callback' );

    或者您可以使用the_content过滤器注册另一个回调函数,以在浏览器中显示之前修改文章内容。

    // define the callback function to modify the text
    function change_text_another_callback( $content ) {
    // add the code to change text here and then return it
    return $filtered_content;
    }
    // hook in to ‘the_content’ filter with the add_filter() function
    add_filter( ‘the_content’, ‘change_text_another_callback’);
    // define the callback function to modify the text
    function change_text_another_callback( $content ) {
    // add the code to change text here and then return it
    return $filtered_content;
    }
    // hook in to ‘the_content’ filter with the add_filter() function
    add_filter( ‘the_content’, ‘change_text_another_callback’);
    // define the callback function to modify the text
    function change_text_another_callback( $content ) { 
    // add the code to change text here and then return it 
    return $filtered_content;
    }
    // hook in to 'the_content' filter with the add_filter() function
    add_filter( 'the_content', 'change_text_another_callback');

    两种不同的方法,结果相同。知道何时使用一个而不是另一个是成为优秀WordPress开发人员的关键。

    WordPress钩子如何工作?

    房子的例子很简单,可以理解钩子的基本功能,但它没有捕捉到它们如何工作的复杂性。最重要的是钩位置和特异性的概念。

    一个更好的例子是将处理WordPress网页想象成组装汽车。与制造汽车需要时间不同,组装网页几乎是瞬间完成的。

    组装网页就像组装汽车

    组装网页就像组装汽车

    就像汽车如何在现代装配线中逐个组装在一起一样,WordPress网页由服务器和客户端逐个组装。

    WordPress核心就像汽车引擎、底盘和其他必需品,为网站的“核心”功能提供动力。

    您可以仅使用WordPress核心就拥有一个功能强大的网站,但这有什么乐趣呢?您需要向站点添加令人兴奋的功能。这就是WordPress插件和主题介入的地方,它们都广泛使用钩子。

    在上面的示例中,每个编号的站点就像WordPress核心中的一个钩子。有两种类型的站点,例如动作和过滤器。每个站都包含一个特定类型的插槽,它只接受某些工具,类似于动作函数和过滤器函数。

    为了模块化和效率,所有站点都以频繁的间隔放置。

    根据特定位置的要求,我们可以为该特定站点的工作安装(或钩子)最合适的工具。这些工具就像用于与WordPress交互或修改WordPress的回调函数。

    一些工具可以显着改变汽车的工作,就像注册到动作的回调一样。其他工具仅用于自定义汽车的外观,例如注册到过滤器的回调。

    在正确的站点使用正确的工具对于制造一流的汽车至关重要。同样,钩子帮助我们根据我们的独特需求定制WordPress。

    如果你扩展这个类比,插件就像添加有用的汽车功能,如安全气囊、娱乐控制台、远程无钥匙系统等(像这些是为了增强WooCommerce的功能)。主题类似于自定义汽车的视觉部分,例如整体设计、喷漆、轮辋等(这是自定义WordPress主题的方法)。

    在哪里注册钩子及其函数?

    在WordPress中添加钩子有两种推荐的方法:

    • 插件:制作您自己的插件并在其中添加所有自定义代码。
    • 子主题:在子主题的functions.php文件中注册钩子和回调函数。

    对于本教程,让我们从创建插件开始。为此,请在您的/wp-content/plugins/目录中创建一个新文件夹。

    我给我的插件命名salhooks,但你可以随意命名它。根据 WordPress 指南,您需要在插件目录中创建一个具有相同名称 (salhooks.php )的PHP文件。

    将以下标题字段添加到您的插件文件以将其注册到WordPress。您可以在WordPress Codex中了解有关插件标头要求的更多信息。

    <?php
    /*
    Plugin Name: Salhooks
    Version : 1.0
    Description: Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
    Author : Salman Ravoof
    Author URI : https://www.salmanravoof.com/
    License : GPLv2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain: salhooks
    */
    //=================================================
    // Security: Abort if this file is called directly
    //=================================================
    if ( !defined(‘ABSPATH’) ) {
    die;
    }
    <?php
    /*
    Plugin Name: Salhooks
    Version : 1.0
    Description: Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
    Author : Salman Ravoof
    Author URI : https://www.salmanravoof.com/
    License : GPLv2 or later
    License URI: https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain: salhooks
    */
    //=================================================
    // Security: Abort if this file is called directly
    //=================================================
    if ( !defined(‘ABSPATH’) ) {
    die;
    }
    <?php
    /*
    Plugin Name:  Salhooks
    Version    :  1.0
    Description:  Demonstrating WordPress Hooks (Actions and Filters) with multiple examples.
    Author     :  Salman Ravoof
    Author URI :  https://www.salmanravoof.com/
    License    :  GPLv2 or later
    License URI:  https://www.gnu.org/licenses/gpl-2.0.html
    Text Domain:  salhooks
    */
    //=================================================
    // Security: Abort if this file is called directly
    //=================================================
    if ( !defined('ABSPATH') ) { 
    die;
    }

    保存此文件,然后在您的WordPress仪表盘中激活该插件。我将在本地WordPress安装中使用这个插件来演示钩子是如何工作的。

    作为旁注,您还可以直接编辑WordPress核心文件以注册钩子。但是,不建议这样做,因为每次更新WordPress时,您的所有自定义代码都会被覆盖。出于同样的原因,您不应该在父主题中添加钩子。

    使用WordPress钩子

    一个WordPress钩子本身什么都不做。它只是坐在代码中,等待一些钩子函数来激活它。要使用钩子,您至少需要调用2个其他函数。

    首先,您需要使用钩子函数注册钩子并在其中引用回调函数。然后你需要定义你之前在钩子函数中提到的回调函数。每次触发钩子时,WordPress都会运行此回调函数。

    定义这些函数的顺序无关紧要,但最好将它们放在一起。

    动作和过滤器具有不同的钩子函数。从现在开始,让我们将它们称为Action FunctionsFilter Functions。正如您将看到的,它们有自己的语法和参数要求。

    1. 钩住一个动作
    2. 钩住过滤器
    3. 使用Hooks自定义WordPress登录页面

    钩住一个动作

    动作提供了一种在WordPress 核心、插件或主题执行中的特定点运行自定义代码的方法。

    add_action() 动作函数

    您可以按照以下步骤使用动作注册回调函数:

    1. 定义一个带有自定义代码的回调函数。当WordPress的代码执行期间触发它注册到的任何动作时,此回调函数将运行。
    2. 使用该add_action()函数将您的回调函数连接到您想要的动作。根据WordPress Codex,add_action()函数至少需要传递两个参数:
        • 要挂钩的动作的名称。
        • 触发动作时将运行的回调函数的名称。
    3. add_action()函数还接受两个可选参数来设置prioritynumber of arguments。我们稍后会讨论它们。

    最好将回调函数参数命名为尽可能接近钩子函数传递的参数。

    让我们看一个使用该add_action()函数的例子。

    // define the callback function, the arguments are optional
    function example_callback(