插件在多站点中更新后如何运行脚本?

时间:2014-06-30 作者:MadtownLems

想象一个WordPress多站点网络,其中包含插件Foo(但仅在某些站点上处于活动状态)。当将插件Foo从1.0版升级到2.0版时,Foo希望在数据库中做一些工作。(为了进行此练习,我们假设它希望停止在10个不同的wp\\U选项行中存储数据,并将其全部存储在序列化数组中。)

更新Foo时,Foo如何为每个站点运行其Foo\\u db\\u更新脚本?

一个常见的答案是,Foo应该钩住admin\\u init,对照db存储的版本检查Foo的当前版本,并查看是否需要运行此脚本。这里的主要问题是,这不是在多站点环境中可以轻松完成的事情。如果我可以轻松地触发网络中所有站点的admin\\u init事件,并加载每个站点的当前插件,那么这种方法可能会奏效,但我不知道如何做到这一点。

我已经尝试连接到wpmu\\u upgrade\\u站点,并在将Foo更新到2.0版后运行升级网络。然而,这只使用switch\\u to\\u blog作为每个站点,并没有完全加载它切换到的每个站点的插件。这意味着,如果Foo向wpmu\\u upgrade\\u站点添加了一个函数,那么当从网络管理员单击升级网络时,该函数将不会启动。

那么,插件在多站点环境中运行这样一个脚本的最佳方式是什么呢?

1 个回复
SO网友:Mamaduka

最好在每个站点上运行类似的DB更新。您可以将插件版本存储在wp\\u options(当前站点的选项)中,然后打开admin_init 比较版本并运行升级。

如果您想运行更复杂/更大的更新,我建议您为插件创建自定义升级页面,并且只为用户显示管理通知,以便他们可以手动运行。

结束

相关推荐

3.9 breaks multisite

我刚刚更新到3.9,我的所有网站现在都是网络上的主要(第一个)网站。如果我转到子网站管理页面,url会显示我在我的子网站上,但实际上我是网络主站点的管理员。管理栏也会显示当前站点是主网络站点,但url显示我应该在子网站上。我创建了一个新的多站点测试环境,同样的事情也发生了。如果我创建一个新的子网站,它将始终引导我到主站点,但URL将显示子网站地址。(前端和后端/管理)。似乎发生了一个重大的重定向问题。