2

卸载钩子无法正常工作,因为当我卸载插件时,表没有被删除。请帮我解决一下这个。这是我正在使用的以下代码。请告诉我我错过了什么。

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' );
}
4

1 回答 1

1

我对原因并不积极,但我可以看到两件事。一个是您可以register_*_hook从内部删除所有 3 个is_admin()并将它们留在任何条件之外。

PS:你为什么有两个 *_activation_hooks?

另一种是使用文件uninstall.php而不是register_uninstall_hook. 我没有找到我看到讨论的钩子陷阱的链接,但很长一段时间以来我只使用该uninstall.php方法。

Codex 中有这个注释,但没有进一步说明原因

重点放在使用“uninstall.php”卸载插件的方式上,而不是 register_uninstall_hook。

以及指向此 WordPress 答案的链接:卸载、激活、停用插件:典型功能和操作方法
但是检查那里的所有结果

于 2013-04-13T06:29:42.553 回答