REGISTER_UNINSTALL_HOOK()vs.uninstall.php-哪种方法更好地处理插件卸载脚本?

时间:2016-10-08 作者:iSaumya

今天在查看WP Codex时,我看到了两种处理插件卸载脚本的方法(如删除、选项、数据、表等)。一种方法是使用register_uninstall_hook() 另一种是使用uninstall.php.

尽管codex page 提供了很多关于这两种方法的信息,但没有说明使用一种方法比使用另一种方法有什么好处。

由于这里有这么多WP专家,我想我应该问这个问题,关于哪个选项是处理卸载脚本的更好方法?使用register_uninstall_hook()uninstall.php?

希望有人能澄清。提前谢谢。

2 个回复
最合适的回答,由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.)

SO网友:CodeMascot

嗯,这取决于你想要什么。register_uninstall_hook() 创建挂钩,并在uninstall 已单击链接。这意味着它实际上创建了一个钩子,单击卸载链接将调用该钩子。假设您开发了一个插件,并基于该插件创建其他插件,并且这些附加插件需要在基于插件卸载的基础上执行操作,那么这个挂钩将非常有用。Here 您将获得完整的概述。

uninstall.php 是插件的通用卸载程序。它将在你的插件卸载时启动。但默认情况下,它不提供任何挂钩。

here 了解更多信息。

相关推荐