2014-01-06 79 views
5

因此,在插件激活時,我有4個在wp數據庫中創建的表。在卸載時,我想刪除表格。我已經能夠寫出它來刪除停用表上的表,但從我讀過的,最好保留db表信息,直到管理員卸載而不是停用。我一直在尋找答案,但我似乎能夠找到答案是放棄他們在停用。我也有我需要卸載它的版本選項。 T如何在使用Wordpress進行卸載時刪除表格?

回答

0

那麼,當我搜索這個問題時,我得到了很多結果。下面是我得到了什麼: -

function mr_np_activate(){ 
    // hook uninstall 
    if (function_exists('register_uninstall_hook')) 
     register_uninstall_hook(__FILE__,'mr_np_uninstall');   
} 
register_activation_hook(__FILE__,'mr_np_activate');  

function mr_np_uninstall() { 
    delete_option('my_plugins_options'); 
} 

來源:https://wordpress.stackexchange.com/questions/24600/how-can-i-delete-options-with-register-uninstall-hook

欲瞭解更多信息:http://codex.wordpress.org/Function_Reference/register_uninstall_hook

0

使用,register_uninstall_hook。 它註冊卸載鉤子,當用戶點擊調用該插件卸載本身的卸載鏈接,對將被稱爲 查詢詳情http://codex.wordpress.org/Function_Reference/register_uninstall_hook

+0

我看到了一個爲好,這是我有什麼代碼,它不工作:
在我的主文件 'require_once「uninstall.php」; register_uninstall_hook(__FILE__, 'e34s_db_clients_uninstall');' ,然後在我的uninstall.php '函數e34s_db_clients_uninstall(){ \t全球WPDB $; \t \t $ table_name的= $ wpdb->前綴。 'e34s_clients'; \t $ sql ='DROP TABLE IF EXISTS $ table_name;'; \t $ wpdb-> query($ sql); \t delete_option('e34s_time_card_version'); }' – jameslcarton

0

刪掉表,只有當管理員卸載/刪除插件。

當管理員停用插件時,不要刪除表格,因爲用戶通常會停用所有插件以解決wordpress錯誤後,他們將重新激活插件,如果當時刪除表格,他們將失去所有插件設置由admin配置。同時升級wordpress會自動停用所有插件並在升級成功後重新激活。

說明刪除表,同時unistalling:

+0

是的,我已經看到了,這就是爲什麼我要求的解決方案,以刪除刪除創建的表,而不是取消 – jameslcarton

+0

補充說明檢查 – bhuthecoder

9

你不應該讓uninstall.phpbhuthecoder說。您可以根據需要命名該文件,或者您可以在單個文件中執行此操作,而無需單獨卸載文件。

register_uninstall_hook('uninstall.php', 'on_uninstall'); 

這意味着,WP將運行uninstall.php和功能on_uninstalluninstall.php時,該插件將被刪除。所以,如果你願意,你可以重命名文件,你可以重命名該函數。

register_uninstall_hook(__FILE__, 'on_uninstall'); 

它的意思是一樣的,但__FILE__表明這是目前工作當前的文件和功能on_uninstall應該在這個文件中。

__FILE__php.net

的完整路徑,並解決符號鏈接的文件的文件名。如果在include中使用 ,則返回包含文件的名稱。用於激活/去激活/卸載功能

簡單的例子。

function on_activation() 
{ 
    //Some stuff 
} 

function on_deactivation() 
{ 
    //Some stuff 
} 

function on_uninstall() 
{ 
    //Some stuff 
} 

register_activation_hook(__FILE__, 'on_activation'); 
register_deactivation_hook(__FILE__, 'on_deactivation'); 
register_uninstall_hook(__FILE__, 'on_uninstall'); 

如果你添加了一些選項,你可以刪除它時,卸載這樣的:

delete_option('some name'); 

由於bhuthecoder說,你不應該刪除表時失活,這是多餘的,不友善的用戶,他們可以在停用後丟失他的數據。

有在你的代碼的語法錯誤:

$sql = 'DROP TABLE IF EXISTS $table_name;'; 

應該是這樣的:

$sql = "DROP TABLE IF EXISTS $table_name"; 

如果你想放一些變量,你應該使用雙引號的字符串中。

和require_once是多餘的。 更好的是這樣的:

function e34s_db_clients_uninstall() 
{ 
    global $wpdb; 
    $table_name = $wpdb->prefix . 'e34s_clients'; 
    $sql = "DROP TABLE IF EXISTS $table_name"; 
    $wpdb->query($sql); 
    delete_option('e34s_time_card_version'); 
} 

register_uninstall_hook(__FILE__, 'e34s_db_clients_uninstall'); 

或者這樣:

register_uninstall_hook('uninstall.php', 'e34s_db_clients_uninstall'); 

隨着功能e34s_db_clients_uninstall uninstall.php

2

有兩種方法可以做插件卸載該操作/刪除。

我學到的最好的方法是使用uninstall.php

uninstall.php只有負載時插件被移除或刪除插件,你可以把任何代碼,它在用戶刪除運行或卸載插件。

<?php 
/* 
* Removing Plugin data using uninstall.php 
* the below function clears the database table on uninstall 
* only loads this file when uninstalling a plugin. 
*/ 

/* 
* exit uninstall if not called by WP 
*/ 
if (!defined('WP_UNINSTALL_PLUGIN')) { 
    exit(); 
} 

/* 
* Making WPDB as global 
* to access database information. 
*/ 
global $wpdb; 

/* 
* @var $table_name 
* name of table to be dropped 
* prefixed with $wpdb->prefix from the database 
*/ 
$table_name = $wpdb->prefix . 'table_name_to_be_dropped'; 

// drop the table from the database. 
$wpdb->query("DROP TABLE IF EXISTS $table_name"); 

用表名改變「table_name_to_be_dropped」。