通过选项菜单卸载和停用插件

时间:2011-11-08 作者:Rob

我正在创建我的第一个插件(根据需要修改现有的插件),尽管它工作得很好,但我正在尝试创建一个简单的选项菜单,以允许停用插件,或停用和删除插件创建的表。

在选项面板中,我有以下表单,允许管理员单击复选框,然后提交我希望获得的表单:

删除插件创建的表停用插件重定向回插件页面以下是“我的选项”页面的代码:

<p class="submitmetataxonomyuninstall">
<form method="post" action=""; onsubmit="if (!this.verify.checked) return false;">
<?php _e("Also Delete all Tables & Data from Database:", \'menu-test\' ); ?>
    <input type="checkbox" name="verify" /></p>
<p><i>(IMPORTANT: This action CANNOT be reversed and will remove all tables and data from the database.)</i></p>
<p class="submit"><input type="submit" name="submitmetataxonomyuninstall" class="button-primary" value="<?php esc_attr_e(\'Deactivate & Uninstall\') ?>" /><small> (Checkbox above must be checked for button to work.)</small></p>
</form>
</p>
然而,我就是不能让它发挥作用。

这就是我认为我需要调用的函数(当这是主插件函数时,它会很好地停用和删除表):

register_deactivation_hook( __FILE__, \'simple_term_meta_uninstall\' );
function simple_term_meta_uninstall() {
    global $wpdb;

    if (function_exists(\'is_multisite\') && is_multisite()) {
        // check if it is a network activation - if so, run the activation function for each blog id
        if (isset($_GET[\'networkwide\']) && ($_GET[\'networkwide\'] == 1)) {
            $old_blog = $wpdb->blogid;
            // Get all blog ids
            $blogids = $wpdb->get_col($wpdb->prepare("SELECT blog_id FROM $wpdb->blogs"));
            foreach ($blogids as $blog_id) {
                switch_to_blog($blog_id);
                _simple_term_meta_uninstall();
            }
            switch_to_blog($old_blog);
            return;
        }   
    } 
    _simple_term_meta_uninstall();      
}
我相信这也会从现有插件文件中调用此函数:

register_uninstall_hook( __FILE__, \'simple_term_meta_uninstall\' );

function _simple_term_meta_uninstall()
{
    global $wpdb;

    $table_name = $wpdb->prefix . \'termmeta\';

    $wpdb->query("DROP TABLE IF EXISTS $table_name");

    delete_option( "simple_term_meta_db_version" );
}
如何使用所示的表单调用此函数?

1 个回复
SO网友:Sterling Hamilton

您只需获取任何插件的basename即可将其停用。

if( $uninstall == true ) {
    delete_option( \'CHANGETHIS\' );
    deactivate_plugins( plugin_basename( __FILE__ ) );
}
通常它们看起来像mypluginfolder/mypluginmasterfile。php

试试看。

有多种方法可以让它发挥作用。

如果希望选项页上的按钮调用该选项,可以发布到选项页并检查是否单击了卸载按钮。

类似于:

$uninstall = isset( $_POST[ \'uninstall\' ] ) ? true : false;

结束