2013-04-13 4 views
2

Uninstall Hook не работает должным образом, так как при удалении плагина таблица не удаляется. Пожалуйста, помогите мне с этим. Вот следующий код, который я использую. Пожалуйста, скажи мне, что мне не хватает.Wordpress Plugin Uninstall not working

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

ответ

1

Я не уверен относительно причины, но я могу видеть две вещи. Во-первых, вы можете удалить все 3 register_*_hook изнутри is_admin() и оставить их вне любого условного.

PS: почему у вас есть *_activation_hook s?

В другом случае используется файл 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 там.