从网络/多站点卸载插件时从所有博客中删除选项

时间:2016-03-16 作者:Mark Kaplun

Codex says about deleting options on uninstal

//请注意,在多站点循环浏览博客时,删除每个博客上的选项不会缩放。你只能离开他们。

我不是很有希望,但有没有现成的可扩展的方法可以做到这一点?理论上,你可以有一个卸载实用程序插件,但我从来没有听说过有人真的这么做,这只是一个坏主意,还是没有人真正关心数据库中留下的垃圾?

1 个回复
最合适的回答,由SO网友:J.D. 整理而成

因为它是一个wiki,codex是一个众所周知的不可靠的信息来源(但你可能已经知道了)。然而,在大型网络上卸载可能不会扩展,这可能是真的。

我所做的in one of my plugins 在所有站点上运行插件的卸载例程,除非wp_is_large_network() 是真的。在大型网络上,插件只是假设它无法正常运行卸载,因此它不会尝试卸载。

我要做的另一件事是让插件跟踪它实际安装在哪些站点上(当它不是网络活动时),这样它将在每个站点上卸载,而不管网络的大小。因此,如果网络上有20000个站点,但该插件仅安装在3个站点上,它将从这3个站点卸载自己。

我认为,同样重要的是要记住,运行大型网络的人将一直在处理这类事情(例如,每次他们更新WordPress时)。他们知道,安装/更新/卸载在大多数情况下都无法扩展,因此他们必须为此编写自己的脚本。

所以在我的插件中,我基本上只专注于提供基本的卸载例程,在应该扩展的时候运行它,以及showing the admins a notice 当它可能无法扩展,因此插件不会自行尝试时。

Update (2015-03-16): 我只记得有一张与本次讨论相关的trac记录单:#14170, 尤其是来自this comment 关于为什么决定core本身不会为此提供API,on提供了大量信息。票证还包含some good advice on optimizing for multisite:

我在core中反对这一点的原因正是通过您的插件来证明的。仔细看,你正在创建一大堆糟糕的表格。您正在为每个博客创建六个表。这无法以任何合理的方式进行扩展。

没有一个网络管理员会在他们的网站上允许这样做,因为有很多其他插件占用的空间要小得多。我厌倦了插件有一个官方的API来做这样的事情。如果有人想在他们的网络上使用你的插件,他们会禁用所有这些功能,以便自己生成这些表。(为WordPress.com上的每个网站生成commentmeta表大约需要两周的时间。)

旁注-其中很多都是查找表,可能应该是全局表。不是的可以是post类型。那么你根本不需要这样做。