在插件激活时,我有4个在WordPress数据库中创建的表。
在卸载时我想删除表。
我已经能够将其写出来删除停用时的表格。但是从我读过的内容来看,最好保留数据库表信息,直到管理员卸载而不是停用。
我一直在寻找答案,但我似乎能找到的就是在停用时放弃它们。我也有我需要用它卸载的版本选项。
答案 0 :(得分:12)
您不应该将 uninstall.php 设为 bhuthecoder 。您可以按照自己的意愿命名文件,也可以在单个文件中进行命名,而无需单独的文件进行卸载。
register_uninstall_hook('uninstall.php', 'on_uninstall');
这意味着当插件将被删除时,WP将在 uninstall.php 中运行 uninstall.php 并运行 on_uninstall 。因此,您可以根据需要重命名文件,您可以重命名该功能。
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');
uninstall.php 中的功能 e34s_db_clients_uninstall 。
答案 1 :(得分:3)
there are two ways to do this operation on plugin uninstall/delete.
the best way i learned is by using uninstall.php
uninstall.php only loads when a plugin is removed or deleted from the plugins you can put any code in it to run when user deletes or uninstalls a plugin.
<?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" );
change the "table_name_to_be_dropped" by your table name.
答案 2 :(得分: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');
}
了解更多信息:http://codex.wordpress.org/Function_Reference/register_uninstall_hook
答案 3 :(得分:0)
使用,register_uninstall_hook
。
它注册当用户点击要求插件自行卸载的卸载链接时将调用的卸载钩子,
有关详情,请查看http://codex.wordpress.org/Function_Reference/register_uninstall_hook
答案 4 :(得分:0)
仅在管理员卸载/删除插件时删除表。
当管理员停用插件时,不要删除表,因为用户通常会停用所有插件以解决wordpress错误,修复后会再次重新激活插件,如果您在此时删除表,他们将丢失所有已配置的插件设置同时升级wordpress会自动停用所有插件并在成功升级后重新激活。
在取消播放时删除表格的说明:
答案 5 :(得分:0)
使用 register_deactivation_hook。这对我有用。
function on_deactivation() {
global $wpdb;
$table_name = $wpdb->prefix . 'school';
$sql = "DROP TABLE IF EXISTS $table_name";
$wpdb->query( $sql );
delete_option( 'wp_install_uninstall_config' );
}
register_deactivation_hook( __FILE__, 'on_deactivation' );