WordPress 6.5 引入新的插件依赖标头,让插件依赖变得更加容易
我们知道很多插件是依赖于其他插件的,比如我所有插件都依赖于 WPJAM Basic 插件,其他插件也有类似的情况,甚至有些插件纯粹作为其他插件的扩展,在其之上构建功能,所以 WordPress 6.5 引入插件依赖功能,使得安装和激活插件及其依赖的插件的过程更加容易和方便。
新的插件标头
WordPress 6.5 为了实现插件依赖功能,引入了一个新的插件标头:Requires Plugins
。
这个插件标头用来列出所依赖的其他插件的 slug,这些 slug 应该是 WordPress.org 上使用的,并且必须用逗号分隔。并且只应该包括 slug,而不是插件主文件的完整路径,例如使用 wpjam-basic
而不是 wpjam-basic/wpjam-basic.php
。
比如下面就是「微信机器人」的插件标头,增加了 「WPJAM Basic」作为被依赖插件:
/**
* Plugin Name: 微信机器人高级版
* Plugin URI: https://blog.wpjam.com/project/weixin-robot-advanced/
* Requires Plugins: wpjam-basic
*/
依赖插件如何使用
定义了插件依赖之后,在使用上就有一些不同了,如果一个插件有了依赖插件之后,在其依赖的插件未安装之前无法安装,激活也是,也是要先激活被依赖的插件。
比如我的「微信机器人」插件依赖「WPJAM Basic」,那么「WPJAM Basic」没有安装就无法安装「微信机器人」,要先激活「WPJAM Basic」才能激活「微信机器人」。
之前我都要让用户先去安装「WPJAM Basic」,现在系统会自动提示了。😁
反过来,如果一个插件被其他插件依赖了,依赖它的插件已经激活在用了,它就不能被停用了,同样依赖的插件安装了,他就不能被删除。
还是以「WPJAM Basic」和「微信机器人」举例,如果「微信机器人」已经激活在用了,那么「WPJAM Basic」就不能被停用,如果「微信机器人」被停用了再被删除之前,「WPJAM Basic」就不能被删除。
插件依赖的界面
为了让大家更容易理解插件依赖功能,我们还是来看看界面的改动吧:
首先在插件界面,也就是已安装的插件列表,先看看 6.5 版本前后界面的对比:
这是之前的:
这是之后的:
从上图可知,进行了以下更改:
- 插件现在包含其依赖的插件列表,并链接到相应的插件以便安装和激活。
- 被依赖的插件现在包含了依赖它的插件列表。
- 如果插件依赖的插件未安装且未激活,则“激活”链接将被禁用。
- 如果插件具有处于活动状态的依赖插件,则“停用”和“删除”链接将被禁用。
- 依赖插件的批量操作被禁用。
接下来看下添加插件的页面,也是先看一下前后的对比图:
之前:
之后:
总结一下:
- 如果插件依赖的插件未安装,则其插件卡片和弹窗中的“立即安装”和“激活”按钮都会被禁用。
- 插件现在包含了一个列出其依赖的插件列表,并有一个“更多详情”链接,点击则可打开含有被依赖插件信息的弹窗,其中包含“立即安装”或“激活”按钮,具体取决于它们当前的安装状态。
- 现在插件弹窗在点击按钮后会保留,而且弹窗内的插件安装和激活现在通过 AJAX 直接执行。
插件依赖功能常见问题
如果不再满足依赖会发生什么?
假设被依赖的插件被通过FTP或其他方式删除,后台的插件页面会显示提示,告知用户缺少需要安装和/或激活的依赖。此外不再满足依赖关系的插件将在其插件行中会有一个错误提示。
如果插件更新有新的依赖项会发生什么?
更新将被允许,插件依旧保持激活状态。后台的插件页面会提示用户有缺失的依赖需要安装和激活。
如果存在循环依赖会发生什么?
循环依赖是指两个或多个插件在其需求中形成循环。例如:插件A需要插件B需要插件C需要插件A
插件依赖功能包括了循环依赖检测,并且会提示用户哪些插件的依赖要求无效,这些插件不能被激活,用户应该联系插件作者,以便在适当的地方打破这种循环引用
还需要防御性编码吗?
还需要,插件依赖性使用户更容易安装和激活所需的插件,并在不满足依赖时通知他们,然而,插件依赖功能目前不包括对被依赖的插件的最小或最大版本的支持,也不考虑插件的加载顺序。因此,插件作者应继续使用function|class|interface_exists()
和版本检查,以确保插件的特定功能的可用。
插件依赖功能的局限性
依赖插件还是有一定的局限性:
首先依赖插件可以是托管在 WordPress.org 上的插件,也可以是不在官方托管的插件,被依赖的插件如果是托管在 WordPress.org 上的插件,则会在界面上显示安装链接,否则则需要用户自己去安装。
目前不支持将必用(Must-Use)插件作为被依赖插件,现在还在讨论,以后可能有更改。另外当前插件依赖功能不支持需要插件的主题,主题作者应继续使用已有检查和消息提示机制。
不过插件依赖功能还是非常方便的功能,特别对于我们来说,之后我都会给所有插件增加插件依赖的标头。😄