卸载Hook无法正常工作,因为当我卸载插件时,表不会被删除。请帮我解决一下这个。以下是我正在使用的以下代码。请告诉我我错过了什么。
register_uninstall_hook( __FILE__, 'plugin_db_uninstall' );
function plugin_db_uninstall() {
global $wpdb;
$table_name = $wpdb->prefix."user_master";
$wpdb->query("DROP TABLE IF EXISTS $table_name");
$table_name = $wpdb->prefix."candidate_master";
$wpdb->query("DROP TABLE IF EXISTS $table_name");
}
完整代码
define('TXTFOLDER', plugins_url()."/candidate_section/txtfiles");
function candidate_install () {
if (!file_exists(TXTFOLDER)) {
mkdir(TXTFOLDER, 0777);
}
}
function candidate_section_create_table()
{
global $wpdb;
$sql =
"CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."user_master`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`email` varchar(255) NOT,NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
dbDelta($sql);
$sql1 =
"CREATE TABLE IF NOT EXISTS `".$wpdb->prefix."candidate_master`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`user_id` bigint(20) NOT NULL,
`position` varchar(255) NOT NULL,
`status` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;";
dbDelta($sql1);
}
function plugin_db_uninstall() {
global $wpdb;
$table_name = $wpdb->prefix."user_master";
$wpdb->query("DROP TABLE IF EXISTS $table_name");
$table_name = $wpdb->prefix."candidate_master";
$wpdb->query("DROP TABLE IF EXISTS $table_name");
}
if (is_admin()) {
add_action('admin_menu', 'candidate_menu');
register_activation_hook(__FILE__, 'candidate_install');
register_activation_hook( __FILE__, 'candidate_section_create_table' );
register_uninstall_hook( __FILE__, 'plugin_db_uninstall' );
}
答案 0 :(得分:1)
我对这个原因不是很肯定,但我可以看到两件事。一个是您可以从register_*_hook
内删除所有3个is_admin()
,并将它们置于任何条件之外。
PS:为什么你有两个 *_activation_hook
?
另一个是使用文件uninstall.php
而不是register_uninstall_hook
。我没有找到我所看到的钩子陷阱的链接,但是很长一段时间我只使用uninstall.php
方法。
有this note in the Codex,但没有进一步参考为什么:
重点是使用'uninstall.php'卸载插件而不是register_uninstall_hook。
此WordPress答案的链接:Uninstall, Activate, Deactivate a plugin: typical features & how-to 但请检查那里的all the results。