如何在插件开发中测试‘Upgrader_Process_Complete’挂钩?

时间:2019-01-22 作者:Aurovrata

我在WP repo中维护和开发了几个插件,并一直希望部署一些更新,以显示通知/设置正在升级到插件新版本的安装的新设置。但是,无法手动更新本地主机上的插件(有feature request 这将包含在WP核心中)。我在上找到此帖子reddit 有一些有趣的建议,即

更新WP repo中的代码,但保持相同的当前版本号,在本地主机上安装较低版本号,并通过仪表板触发更新Github-Updater plugin 从github repo更新插件,但不确定是否有效。我会试着回来把结果贴在这里Updater plugin 它声称它可以从zip文件更新。(将对此进行测试)我想上面的其中一个应该会起到作用。然而,还有其他人遇到过这个问题吗?您使用了什么解决方案?

[编辑]选项4不会触发更新挂钩,它只是停用/删除旧插件并安装新插件。

1 个回复
SO网友:Krzysiek Dróżdż

好的,所以您想在更新之后做一些事情(比如添加一些DB表,更改其结构或类似的事情)。

您提到的功能请求非常旧,我不相信它会得到解决,因为不需要该功能。

有很多情况下,插件不会收到版本更改的通知:

用户手动上载较新版本并执行更新

更新通知是一个旨在通知您插件更新程序结束其工作的事件。你可以登录它,你可以发送一些通知电子邮件,等等。

但您不应该依赖它来执行插件更新版本的任何操作。以上这些案例说明了原因。

另一方面,如果你的插件不能工作,那是它的错,而不是WP。当你去Codex page for that hook, 您将看到:

upgrader\\u process\\u complete操作挂钩在插件安装或更新的下载过程完成时运行。

它传递了两个参数:WP\\u Upgrader()类的一个实例和$hook\\u额外数组。

小心使用:当您在插件中使用upgrader\\u process\\u complete操作挂钩,并且您的插件正在升级时,此操作将运行旧版本的插件。

所以我认为你根本不应该在你的案件中使用这个行动。。。

那么其他插件如何处理这个问题呢

通常的做法之一是对DB进行版本控制。(WP也这样做)。您可以在其中放置一个选项并存储插件版本。您的插件可能会检查该版本,如果它看到该选项与其版本不同,则必须执行DB更新(或任何其他操作)。

相关推荐

重置插件版本缓存|PRE_SET_SITE_TRANSPENT_UPDATE_PLUGINS

在我的插件中,我使用这些过滤器进行自动更新并检查许可证。add_filter( \'pre_set_site_transient_update_plugins\', array( &$this, \'check_for_update\' ) ); add_filter( \'plugins_api\', array( &$this, \'plugin_api_call\' ), 10, 3 ); 但正如我所看到的,WordPress在我的插件中更改了版本标签后,会调用该过