当您从插件卸载时,插件可能需要进行一些清理。 如果用户已停用该插件,然后单击WordPress管理员中的删除链接,则会将插件视为已卸载。 当您的插件被卸载时,您将需要清除插件特定的任何插件选项和/或设置,和/或其他数据库实体(如表)。 经验不足的开发人员有时会使用停用挂钩的错误。 此表说明了停用和卸载之间的区别。 |Scenario |Deactivation Hook |Uninstall Hook| |---|---|---| |Flush Cache/Temp| Yes| No| |Flush Permalinks |Yes| No| |Remove Options from {$wpdb->prefix}_options| No| Yes| |Remove Tables from wpdb |No |Yes| ## 方法1:register_uninstall_hook 要设置卸载挂钩,请使用register_uninstall_hook()函数: ``` register_uninstall_hook(__FILE__, 'pluginprefix_function_to_run'); ``` ##方法2:uninstall.php 要使用此方法,您需要在插件的根文件夹中创建一个uninstall.php文件。 当用户删除插件时,这个魔术文件会自动运行。 例如: /plugin-name/uninstall.php >[danger]警报:使用uninstall.php时,在执行前,插件应该始终检查常量WP_UNINSTALL_PLUGIN以防止直接访问。 该常量将由WordPress在uninstall.php调用期间定义。 当register_uninstall_hook()执行卸载时,常量不被定义。 以下是删除选项条目并删除数据库表的示例: ``` // if uninstall.php is not called by WordPress, die if (!defined('WP_UNINSTALL_PLUGIN')) { die; } $option_name = 'wporg_option'; delete_option($option_name); // for site options in Multisite delete_site_option($option_name); // drop a custom database table global $wpdb; $wpdb->query("DROP TABLE IF EXISTS {$wpdb->prefix}mytable"); ``` >[warning] 注意:在多站点中,通过所有博客循环删除选项可能非常耗资源。