探索如何为 WordPress 添加自定义功能:一份实用指南
作为一个拥有多年 WordPress 后端开发经验的人,我尝试过多种方式来定制 WordPress,以满足自己和他人的特定需求。最常用的方法之一是创建自己的 WordPress 自定义功能插件。但正如你将在本文中看到的,这并非唯一的选择,也不总是最佳选择。
虽然本指南主要面向开发者,但项目经理也可以了解这些策略如何满足团队需求,以及何时以及如何有效地利用它们。
下面是我个性化 WordPress 的几种方法:
- 把代码加入到主题的 functions.php 文件里。
- 创建一个专为自定义功能的 WordPress 插件。
- 利用插件来管理和应用自定义代码段。
- 使用必备插件进行个性化设置。
现在,我们来详细探讨每种方法
将代码添加到Functions.php
在WordPress的“早期”时代,当网站前后端大多使用 PHP 编写时,最快改变网站功能的方法就是向主题的 functions.php 文件添加代码。
你现在还可以这么做,如果你愿意冒险的话,可以直接在WordPress仪表板的主题文件编辑器中进行编辑。
随着时间的推移,我从最喜欢使用 WordPress 的 functions.php 文件来自定义网站变成了最不倾向于使用它的方式。
主要的问题在于,functions.php 文件是隶属于主题的。这意味着,如果你没有使用专门为你定制的主题,而主题发生了更新,你所做的所有个性化设置就会丢失。
一个解决方法是创建一个子主题,这样你就可以保留与父主题相关的更改,而不影响主题本身。
现在,我尽量避免在 functions.php 文件中添加太多自定义代码,主要是因为许多代码更适合放在插件中,这些代码通常用来为网站添加新功能,而不只是改变主题的样式。
还有两种情况下,我会考虑将自定义代码写入 functions.php 文件:
- 这段代码特别针对我自己的定制主题或子主题。
- 我需要快速测试一些更改,因为访问 functions.php 文件通常很方便。
但请记住,不应该把太多更改都堆在 functions.php 文件里,否则这个文件会变得非常复杂。特别是当需要用到多个 PHP 文件和其他类型的文件时,我会选择创建一个专门的 WordPress 自定义功能插件来管理这些更改。
编写自定义函数插件
正如我之前提到的,我添加到网站的代码大多数是用来构建或增强与主题无关的功能。
每当我决定为网站添加更多自定义内容时,我就会开始创建一个自定义功能插件。我通常会以网站的名字来命名这个插件,例如,对于 WP Mayor,我就会创建一个叫做“WP Mayor 自定义功能”的插件。
命名真的很重要!首先,这让网站的其他管理员一眼就能看出这个插件是专为这个网站设计的,并且主要用来放置该网站特定的更改。
其次,给插件文件夹和文件命名保持独一无二,能避免你的插件被 WordPress.org 插件库中其他同名插件意外替换。
创建一个 WordPress 自定义功能插件其实很简单。你只需要在 wp-content/plugins 目录下开始。但是,你应该先创建一个新的文件夹,通常你会需要不止一个文件来整理你的代码,你可能还需要加入 JavaScript 和 CSS 文件。
就拿我们的例子来说,现在我们有了一个新的插件文件夹 wp-content/plugins/wp-mayor-custom-functions 和一个主插件文件 wp-mayor-custom-functions.php。
现在,我们需要给文件加上一个头部信息,这样 WordPress 就能识别这是一个插件。虽然只填写“插件名称”就可以让它基本运作,但我们来看一个更详细的例子:
/**
* Plugin Name: WP Mayor Custom Function
* Plugin URI: https://wpmayor.com
* Description: All the cool features we custom-built for us.
* Version: 1.0.0
* Requires at least: 6.2
* Requires PHP: 8.1
* Author: Thomas Maier
*/
这样做之后,我们的插件应该就会出现在 WordPress 仪表盘的“插件”页面上了。
现在,我们可以开始把真正的 PHP 代码添加到文件里了。
小技巧:如果我不能通过 FTP 访问网站,或者我只是想省事,我会用一个叫做 Pluginception 的插件来快速开始。然后,我可以在 WordPress 仪表板的插件编辑器里添加更多代码。
你可能在想,所有特定于网站的代码都应该放在一个自定义功能插件里吗?
这实际上取决于情况。如果我知道某些自定义代码会在多个项目中使用,我就会把它们放到不同的插件里。但是,专门为一个特定网站设计的代码,我就会放在同一个插件中。这样,我就能减少需要维护的插件数量。
听起来还算简单吧?嗯,在过去几年里,我管理了一个较大的插件公司并对多个网站进行了上百次调整,我发现这些自定义插件通常还是更适合开发人员使用。那么,让我们在下一部分探讨另一种方法。
使用代码片段插件来管理
我习惯把所有通用的代码都整合到一个自定义功能插件里。这样,对插件的任何修改,比如将空白购物车页面重定向到价格页面、添加促销信息或黑色星期五特惠,都会被清楚记录,并存放在各自名字易懂的文件中。
这种方式对于能直接接触到代码的人来说,是“记录好”和“易于阅读”的。
但我发现,尽管我总在做修改或解答相关问题,这并不是管理大量自定义功能的最高效或可持续的方法。
随着越来越多的人开始管理商店和网站,我希望他们能够轻松了解这些更改,而不是依赖一个专门更新的知识库页面。
解决办法是使用一个自定义功能插件来管理 WordPress 仪表板中的代码片段。
我个人偏好是使用免费的 Code Snippets 插件,当然还有其他选项。
安装这个插件后,仪表板里会多出一个专门列出所有代码片段的菜单项。
现在,任何拥有管理权限的人都能看到这些修改。我给每个代码片段起了一个描述性的名字,用注释区详细说明,并给不同的更改打上了标签。
我通常会用相关插件或主题的名称,以及涉及的网站部分作为标签,比如“WooCommerce”和“结账页面”。
如果你选了容易理解的名字和条理清晰的结构,那么任何人都应该能够找到并明白这些调整,我自己也是。我甚至在我的个人网站上也采用这种方法,因为它让一切变得更加方便。
对于那些你只是临时需要的代码片段,比如一些偶尔执行的清理脚本或一些影响前端的操作(如启动一个促销活动),使用自定义功能插件特别方便。
这样做安全吗?
通常,WordPress 允许任何拥有“管理员”权限的用户编辑后端的插件和主题文件。使用自定义代码插件也是同样的情况。所以,旧有的安全措施,即只授予必要的权限给每个用户,仍然很重要。
对于开发者来说,使用插件管理代码意味着在页面加载时某些早期的钩子(hooks)可能不可用,因为插件需要首先被加载。如果你需要在所有其他插件之前加载你的自定义代码,你可能需要查看所谓的“必须使用插件”(MU Plugins)选项。
使用必要插件来自定义 WordPress 功能
所谓的“必用”插件是一种特别类型的插件。
它们在所有其他普通插件之前运行,所以我经常用它们来控制特定页面上某些插件的开启或关闭,比如加速某些特定功能或改善对 admin-ajax.php 的调用效率。
“必用”插件的一个重要特点是它们会自动启用,并且不能通过 WordPress 仪表板被禁用或修改。这让它们成为一个理想的选项,用来存放即使是管理员也不能改动的核心代码。
创建必要插件
必用”插件放在 wp-content/mu-plugins
文件夹里。新安装的 WordPress 默认没有这个文件夹,但有时一些插件或托管服务会自动在这里添加内容。
要往 mu-plugins
文件夹里添加新插件,你需要在你的电脑上创建一个 PHP 文件,就像我之前展示的那样,带有自定义插件的头部信息。这次,不需要担心命名的唯一性,因为“必用”插件不会自动更新。
一旦你对你的新自定义功能插件感到满意,就可以通过 FTP 手动上传到 wp-content/mu-plugins
文件夹。如果这个文件夹还不存在,就新建一个。
虽然你不能通过 WordPress 管理面板修改“必用”插件,但你可以在“插件 > 必用插件”部分看到它们。
以前,我喜欢用一个特殊的方法来定制我的WordPress网站,但现在我不那么喜欢了。问题出在所有的改动都在一个文件里,叫做functions.php,而这个文件属于网站的主题。如果这个主题不是我自己做的,而且被更新了,那么我做的所有调整就会消失。
解决的办法是制作一个’子主题’,这样我就可以保留与原主题相关的所有更改了。
我现在不再在functions.php文件里加很多自定义代码了,因为我发现大多数情况下,这些改动应该通过插件来做,这样可以给网站增加新功能,而不只是改变外观。
有两个情况下我还会在functions.php文件中写自定义代码:
- 当这些代码是专门为我的自定义主题或子主题准备的。
- 当我想快速测试一些更改,因为访问和修改functions.php文件很方便。
但记住,不应该把很多修改都堆在这个文件里。如果文件太复杂,就很难管理。尤其是当需要用到很多PHP文件和其他类型文件的时候,我会选择创建一个专门的WordPress插件来管理这些自定义功能。
编写自定义函数插件
我通常会在我的WordPress网站上添加很多代码,这些代码用来增加一些特别的功能,而不只是改变网站的外观。
当我需要在网站上添加一些特定的自定义功能时,我会创建一个叫做自定义功能插件的东西。比如,如果我的网站叫’WP Mayor’,那我就会创建一个叫做’WP Mayor 自定义功能’的插件。
给插件取个好名字很重要,因为这样其他管理网站的人一看就知道这个插件是跟这个网站直接相关的,并且这个插件可能只包含对这个网站的改动。
同时,确保插件的名字独一无二,这样就不会与WordPress官方插件库里的其他插件混淆,避免你的插件被错误地覆盖。
创建这样的插件很简单,只需要在wp-content/plugins目录下新建一个文件夹,因为你可能会需要添加很多文件,包括一些代码文件,比如JavaScript和CSS。
以’WP Mayor’为例,我们就会在wp-content/plugins目录下创建一个名为’wp-mayor-custom-functions’的文件夹,然后在里面创建一个主插件文件,叫做’wp-mayor-custom-functions.php’。
我们需要在这个主文件里写一些代码,来告诉WordPress这是一个插件。虽然只需要填写插件名称就可以让插件运行,但我会给你看一个包含更多信息的示例头部。
/**
* Plugin Name: WP Mayor Custom Function
* Plugin URI: https://wpmayor.com
* Description: All the cool features we custom-built for us.
* Version: 1.0.0
* Requires at least: 6.2
* Requires PHP: 8.1
* Author: Thomas Maier
*/
当你完成上述步骤后,你创建的插件应该会出现在WordPress控制面板的“插件”部分。这样,你就可以在那里看到和管理它了。
现在,我们可以开始往我们的文件里添加真正的PHP代码了。
一个小技巧:如果我不能用FTP访问网站,或者我只是觉得懒,我会用一个叫做Pluginception的插件来快速开始。然后,我可以直接在WordPress控制面板的插件编辑器里添加更多的代码。
你可能会问,我应该把所有的自定义代码都放在一个插件里吗?这其实看情况。如果我知道一些代码会在很多不同的项目中使用,我就会把它们放在不同的插件里。但是,专门用于一个特定网站的代码,我就会放在同一个插件中。这样我就不需要管理很多不同的代码库了。
听起来还行吧?但是,从我管理一个大型插件公司和对网站做了很多次调整的经验来看,我发现这些自定义插件通常还是太专注于开发人员了。让我们在下一部分探讨一种不同的方法。
使用代码片段插件来管理
我把所有通用的代码都放在一个专门的插件里,这样就可以保持组织井井有条。我还确保所有的修改和调整,比如特殊促销或重要更新,都被清晰记录并整理在易于理解的文件中。
虽然这些代码对于我来说很容易理解,但我意识到这可能不是最有效的方式,尤其是当越来越多的人需要管理网站时。
为了让每个人都能轻松了解和管理这些自定义功能,我决定使用一个WordPress插件,这个插件让我们能够在WordPress控制面板里直接管理所有的代码片段。
我特别喜欢使用一个免费的插件叫做“代码片段”。它在仪表板上添加了一个新的部分,那里列出了所有的代码片段。现在,任何有管理权限的人都可以轻松查看和编辑这些代码。我还给每个代码片段起了一个描述性的名字,并使用注释来详细说明它们的功能,还为不同的更改设置了标签,以便于组织。
我的标签通常是调整的插件或主题的名称以及涉及的页面部分,例如“WooCommerce”和“Checkout”。
如果你给代码和文件取了容易理解的名字并组织得很好,那么任何人,包括我自己,都能轻松找到并明白这些调整的内容。我甚至在我自己的个人网站上也采用这种方法,因为它让我感到很方便。
使用自定义功能插件非常适合那些你只需要暂时用到的代码片段,比如一些偶尔要运行的清理工作,或是一些只在特定时间需要的前端功能,像是开启一个促销活动。
那这种方法安全吗?
通常,WordPress允许任何有管理员权限的人编辑网站的插件和主题代码。使用自定义代码插件也是一样的。所以,老规矩:只给每个人分配他们需要的权限,这样可以保证网站的安全。
对于开发者来说,重要的一点是,当你通过插件管理代码时,有些代码可能需要在其他所有插件之前加载。如果你的代码需要这样做,你应该考虑使用一个特殊的插件类型,叫做“必须使用的插件”(MU Plugins),这样你的代码就可以在其他插件之前加载了。
使用必要插件来自定义 WordPress 功能
必要插件”是一种特别的插件,在WordPress中,它们会在所有其他普通插件之前运行。我用它们来控制特定页面上某些插件的开启或关闭。这种类型的代码还可以帮助加速特定功能,比如伪造的API调用或优化后台的响应速度。
一个重要的特点是,这些必要插件会自动开启,而且在WordPress控制面板里不能被关闭或修改。这使得它们非常适合存放那些连管理员都不应该改动的核心代码。
创建必要插件
必要插件”存放在WordPress文件夹里的wp-content/mu-plugins目录下。通常,新安装的WordPress是没有这个文件夹的,但有时候插件或者网站托管服务可能会自动添加一些东西进去。
如果你想在这个mu-plugins文件夹里加入新的插件,你需要先在你的电脑上创建一个PHP文件,就像我之前展示的自定义插件那样。不过,给这个文件起一个独特的名字在这里不是必须的,因为这些必要插件不会像其他插件那样自动更新。
当你对你的新插件满意时,你需要通过FTP手动上传它到wp-content/mu-plugins文件夹。如果这个文件夹还不存在,你就得自己新建一个。
虽然你不能通过WordPress的管理界面来修改这些必要插件,但是你可以在“插件”菜单下的“强制使用”部分找到它们。
理想情况下,必要插件应该是单个文件的。虽然你可以在一个主PHP文件里引用其他文件,但WordPress找不到存放在子文件夹中的这些文件。如果你的必要插件变得复杂,你应该考虑把主要的代码放到一个普通的插件里,然后只用必要插件来加载和运行所有其他插件之前必须要执行的代码。
总结
我们已经看过了几种在WordPress中添加自定义代码的方法:从在主题的functions.php文件里添加代码,到创建独立的插件和自定义功能插件,再到使用必要插件(mu-plugins)。每种方法都各有优势和可能的弊端,适用于不同的情况。这取决于你想做的改动类型以及谁需要使用这些改动。
联系我们 |
---|
文章看不懂?联系我们为您免费解答!免费助力个人,小企站点! |
① 电话:020-2206-9892 |
② QQ咨询:1025174874 |
③ 邮件:info@361sale.com |
④ 工作时间:周一至周五,9:30-18:30,节假日休息 |