WordPress 6.5 引入插件依赖关系,对开发者更友好!

2024-03-1714:18:10后端程序开发Comments325 views字数 4076阅读模式

WordPress 6.5 引入了插件依赖关系。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

WordPress 通过插件和Hooks API的可扩展性是其最有益的功能之一。有许多插件纯粹作为其他插件的扩展,在其之上构建功能。插件依赖功能旨在使安装和激活扩展插件及其依赖的插件的过程一致且简单。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

新的插件标头

引入了新的标头 Requires Plugins文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

它必须包含其依赖项的以逗号分隔的WordPress.org格式的别名(slugs)列表,例如 my-plugin (my-plugin/my-plugin.php不支持)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

如何使用新标头

只需要在插件标头中新增 Requires Plugins 项即可。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  1. /**
    * Plugin Name: Express Payment Gateway Checkout for Shop
    * Requires Plugins: shop, payment-gateway
     */

要求

依赖插件

对依赖插件有以下要求:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 在安装其依赖项之前无法安装。
  • 在激活其依赖项之前无法激活。

被依赖插件

对被依赖插件有以下要求:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 当其依赖项被激活时无法停用。
  • 安装其依赖项后无法删除。

如果不再满足依赖性会发生什么?

如果通过FTP或部署删除依赖项插件,管理的插件屏幕上将显示一条通知,通知用户缺少需要安装和/或激活的依赖项。此外,不再满足依赖项的每个依赖项将在其插件行中显示错误通知。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

如果插件更新有新的依赖项会发生什么?

目前将允许更新,并且依赖项将保持活动状态。管理的插件屏幕上将显示一条通知,通知用户缺少需要安装和/或激活的依赖项。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

如果存在循环依赖会发生什么?

循环依赖是指两个或多个插件在其需求中形成循环。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

例如:插件A需要插件B需要插件C需要插件A文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

插件依赖包括循环依赖检测,并且会显示通知以告知用户需求无效的插件。插件无法激活,用户应联系插件作者,以便在适当的情况下打破此循环引用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

还需要防御性编码吗?

是的。插件依赖项使用户可以更轻松地安装和激活所需的插件,并在不满足这些插件时通知他们。这意味着插件作者可以在未安装或激活其依赖项时安全地删除检查和通知。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

但是,目前,插件依赖项不包括对依赖项的最小或最大版本支持,也不考虑插件的加载顺序。因此,插件作者应该继续使用function|class|interface_exists()和版本检查,他们的插件依赖于在给定时间可用的特定功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

插件依赖关系会影响WP-CLI吗?

插件依赖项不会阻止通过 WP-CLI 安装没有依赖项的依赖插件,因为假设使用 WP-CLI 的用户是了解其依赖项堆栈的高级用户。但是,为了避免丢失依赖项而被忽视,在依赖项被激活之前,无法使用 WP-CLI 激活依赖项插件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

这会影响wp plugin activate --all,如果依赖项按字母顺序出现早于其依赖项,则可能需要运行多次。我们计划与 WP-CLI 维护者合作,通过探索 WordPress Core、WP-CLI 或两者(如果合适)中的加载顺序来减轻这一负担。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

局限性

托管在 WordPress.org 上的插件

WordPress.org 上托管的依赖插件只能声明也在 WordPress.org 上托管的依赖项。如果您托管在 WordPress.org 上的插件需要未托管在那里的插件,建议您此时不要在插件中使用Requires Plugins标头。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

插件未托管在 WordPress.org 上

未托管在 WordPress.org 上的依赖插件可以声明依赖项,无论托管在 WordPress.org 还是其他地方。但是,UI不会提供第三方依赖项的安装链接,这些依赖项必须继续由用户手动安装。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

必须使用插件作为依赖项

WordPress Core 目前不正式支持必须使用的插件作为依赖项。讨论将在#60504中继续,我们将在做出有关未来可能支持的决定后发布更多信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

需要插件的主题

插件依赖项目前不支持需要插件的主题,主题作者应继续使用他们现有的检查和消息传递。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

新过滤器

引入过滤器挂钩wp_plugin_dependencies_slug是为了允许更改依赖项。例如,如果依赖插件声明my-plugin为依赖项,并且存在高级版本my-plugin,则高级版本可以过滤 slug 并将其转换my-plugin-pro为插件依赖项可以检测到的插件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $slug——别名。

用法示例文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  1. add_filter( 'wp_plugin_dependencies_slug', 'convert_myplugin_to_myplugin_pro' );function convert_myplugin_to_myplugin_pro( $slug ) {
    if ( 'my-plugin' === $slug ) {
    $slug = 'my-plugin-pro';
    }
    return $slug;
    }

用户界面的变化

插件 > 已安装的插件

进行了以下更改:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 依赖插件行现在包含其依赖项列表,链接到相应的插件模式以安装和激活依赖项。
  • 依赖插件行现在包含其依赖项的列表。
  • 如果插件具有未安装且未激活的依赖项,则“激活”链接将被禁用。
  • 如果插件具有处于活动状态的依赖项,则“停用”“删除”链接将被禁用。
  • 依赖插件的批量操作被禁用。

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

WordPress 6.5 引入插件依赖关系,对开发者更友好!
没有列出依赖项或依赖项。

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

WordPress 6.5 引入插件依赖关系,对开发者更友好!
列出依赖项和被依赖项,并根据需求的状态启用/禁用操作。

插件 > 添加新插件

进行了以下更改:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 如果插件具有未满足的依赖项,则其插件卡和插件信息模式中的“立即安装”“激活”按钮将被禁用。
  • 依赖插件卡现在包含一个列出其依赖项的通知,其中包含指向依赖项信息模式的“更多详细信息”链接,其中包含基于当前安装状态的“立即安装”或“激活”按钮。
  • 现在,单击按钮后插件信息模式会持续存在,并且现在可以直接在模式内通过 AJAX 执行基于模式的插件安装和激活。

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

WordPress 6.5 引入插件依赖关系,对开发者更友好!
尽管未满足依赖关系,但未列出依赖关系的插件卡和活动的“立即安装”按钮。

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

WordPress 6.5 引入插件依赖关系,对开发者更友好!
列出了依赖项的插件卡,其中包含用于安装和激活每个依赖项的模式链接,并且在依赖项未满足时禁用“立即安装”按钮。

入门体验

由于插件 > 添加新屏幕上现在使用统一的 AJAX 方法,插件的激活将不再自动重定向到插件 > 已安装的插件屏幕,或插件作者实现的入门体验。这允许用户在不离开当前上下文的情况下安装和激活多个插件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

具有入门体验的插件通常会包含检查,例如,如果使用 WP-CLI 安装并激活其插件,则当用户进入插件的设置屏幕之一时,将触发入门体验。此类实现将不受插件依赖关系的影响,从插件 > 安装的插件屏幕激活链接激活也是如此。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

新的WP_Plugin_Dependencies

WP_Plugin_Dependencies引入了一个新类。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

可以使用以下公共 API 方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

static ::initialize()
通过从 Requires Plugins 标头读取依赖项并获取依赖项的插件 API 数据来初始化插件依赖项。每次执行仅运行一次。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

static ::has_dependents( $plugin_file )
确定插件是否有依赖于它的插件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 插件文件,相对于插件目录。
  • 返回值
    bool插件是否有依赖它的插件。

static ::has_dependencies( $plugin_file )
确定插件是否具有插件依赖项。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 插件文件,相对于插件目录。
  • 返回值
    bool 插件是否有插件依赖。

static ::has_active_dependents( $plugin_file )
确定插件是否有活动的依赖项。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 插件文件,相对于插件目录。
  • 返回值
    bool插件是否有活动的依赖项。

static ::get_dependents( $slug )
获取需要依赖的插件的文件路径。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $slug– 依赖项的 slug。
  • 返回值
    array相对于插件目录的依赖插件文件路径的数组。

static ::get_dependencies( $plugin_file )
获取依赖项所需的插件的slugs。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 依赖插件的文件路径,相对于插件目录。
  • 返回值
    array依赖插件 slugs 的数组。

static ::get_dependent_filepath( $slug )
获取依赖插件的文件路径。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $slug– 依赖插件的 slug。
  • 返回值
    string|false依赖插件的文件路径,相对于插件目录,如果插件没有依赖项,则返回 false。

static ::get_dependency_filepath( $slug )
获取依赖项相对于插件目录的文件路径。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $slug– 依赖项的 slug。
  • 返回值
    string|false如果已安装,则为相对于插件目录的依赖项的文件路径,否则为 false。

static ::has_unmet_dependencies( $plugin_file )
确定插件是否有未满足的依赖项。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 插件的文件路径,相对于插件目录。
  • 返回值
    bool插件是否有未满足的依赖关系。

static ::has_circular_dependency( $plugin_file )
确定插件是否具有循环依赖。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 插件的文件路径,相对于插件目录。
  • 返回值
    bool插件是否存在循环依赖。

static ::get_dependent_names( $plugin_file )
获取需要该插件的插件的名称。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 插件的文件路径,相对于插件目录。
  • 返回值
    array依赖名称数组。

static ::get_dependency_names( $plugin_file )
获取插件所需的插件名称。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $plugin_file– 依赖插件的文件路径,相对于插件目录。
  • 返回值
    array依赖项名称数组。

static ::get_dependency_data( $slug )
返回依赖项的 API 数据。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html

  • 参数
    string $slug– 依赖项的 slug。
  • 返回值
    array|false成功时为依赖项的 API 数据,否则为 false。
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/62310.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/62310.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定