从站点卸载插件时,可能需要进行一些清理。
如果用户停用了插件,然后单击WordPress Admin中的删除链接,则认为该插件已卸载。
卸载插件后,您需要清除特定于插件的任何插件选项和/或设置,和/或其他数据库实体(如表)。
经验不足的开发人员有时会犯错误,为此目的使用停用钩子。
下表说明了停用和卸载之间的差异。
场景 | 停用钩子 | 卸载钩子 |
---|---|---|
Flush Cache/Temp | 是 | 不 |
Flush Permalinks | 是 | 不 |
Remove Options from {$wpdb->prefix}_options | 不 | 是 |
Remove Tables from wpdb | 不 | 是 |
方法1:register_uninstall_hook
要设置卸载钩子,请使用 register_uninstall_hook() 函数:
register_uninstall_hook(
__FILE__,
'pluginprefix_function_to_run'
);
方法2:uninstall.php
要使用此方法,您需要在插件的根文件夹中创建一个文件。当用户删除插件时,此魔术文件会自动运行。uninstall.php
例如:/plugin-name/uninstall.php
警报:在执行任何操作之前,请务必检查常量。这可以防止直接访问。WP_UNINSTALL_PLUGINuninstall.php
常量将由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" );
注意:在多站点中,遍历所有博客以删除选项可能会占用大量资源。