web-dev-qa-db-ja.com

プラグインのアンインストールとオプションメニューからの無効化

私は最初のプラグインを作成しています(必要なものに合わせて既存のプラグインを変更します)。それはうまく機能していますが、プラグインの無効化、またはプラグインが作成したテーブルの無効化と削除を可能にする簡単なオプションメニューを作成しようとしています。

オプションパネルで、私は管理者がチェックボックスをクリックしてから私が到達することを望んでいるフォームを提出することを可能にするために以下のフォームを持っています:

  1. プラグインによって作成されたテーブルを削除する
  2. プラグインを無効にする
  3. プラグインページに戻る

これが私のオプションページのコードです。

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

表示された形式を使用してこの関数をどのように呼び出しますか?

2
Rob

無効にするには、プラグインのベース名を取得するだけです。

if( $uninstall == true ) {
    delete_option( 'CHANGETHIS' );
    deactivate_plugins( plugin_basename( __FILE__ ) );
}

一般的にそれらはmypluginfolder/mypluginmasterfile.phpのように見えます

そのショットを与えます。


それを機能させるにはさまざまな方法があります。

オプションページのボタンにそれを呼び出す場合は、オプションページにPOSTと入力し、アンインストールボタンがクリックされたかどうかを確認するだけで済みます。

何かのようなもの:

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