最合适的回答,由SO网友:J.D. 整理而成
的好处uninstall.php, 引入它的原因是,它允许您将卸载代码与插件的其余代码隔离开来。这意味着卸载时不必加载整个插件。这样可以最大限度地减少插件在卸载过程中无意中运行代码的可能性,而这些代码只打算在插件处于活动状态时运行。然而,一般来说,无论如何,您都不应该在插件文件中运行任意代码,大多数东西都应该只在钩子触发的情况下运行。
从docs included in the original commit:
注册卸载挂钩时,插件不应在函数之外运行任意代码。为了使用钩子运行,必须包含插件,这意味着在卸载过程中将运行任何放置在函数外部的代码。插件不应妨碍卸载过程。
如果没有在插件中运行代码就无法编写插件,那么插件应该创建一个名为“uninstall”的文件。“基本插件文件夹中的php…”。。。
TL;DR: 你的插件应该以这样一种方式构造:它不需要使用unisntall.php, 但无论如何使用它都会增加额外的保护,防止卸载过程中意外运行的东西。
当然,在某些情况下,您可能需要加载部分插件才能正确卸载它。但如果您正在使用uninstall.php, 包含这些文件将是您有意识的决定,因此很难错误地加载运行任意代码的插件的某些文件。
我唯一一次使用register_uninstall_hook() 方法将位于一个非常简单的单文件插件中,其中所有代码都封装到一个类中。
请注意uninstall_plugin() 将运行pre_uninstall_plugin <删除>和uninstall_{$plugin_file}删除[编辑:uninstall_{$plugin_file} 仅在以下情况下运行register_uninstall_hook() 无论使用哪种方法,都会使用动作挂钩。(见票证#34569.)