web-dev-qa-db-ja.com

Register_uninstall_hookでオプションを削除するにはどうすればいいですか?

今、私はこのコードを持っています:

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


/**
 * Delete options
 *
 **/    


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

しかし、私が自分のプラグインを削除するとき、私のすべての選択肢はそこにあります。 (私は自分のオプションを表示するためだけに別のプラグインを作りました)。

プラグインが削除された時にオプションを削除するにはどうすればいいですか?

[]

ホームムロボ

2
homemrobo

代わりにプラグイン用にuninstall.phpファイルを使うこともできます。

http://codex.wordpress.org/Function_Reference/register_uninstall_hook

プラグイン内でコードを実行しないとプラグインを作成できない場合、プラグインはベースプラグインフォルダに 'uninstall.php'という名前のファイルを作成する必要があります。このファイルは、存在する場合、アンインストールフックを迂回するアンインストールプロセス中に呼び出されます。

'uninstall.php'を使うとき、プラグインは実行する前に常にWP_UNINSTALL_PLUGIN定数をチェックするべきです。 WP_UNINSTALL_PLUGIN定数は、プラグインのアンインストール中に実行時にWordPressによって定義され、 'uninstall.php'が直接要求された場合は存在しません。

唯一の目的がオプションを削除することである場合、そのファイルには文字通り1行のコードしか必要ありません。

<?php delete_option( 'your-option' ); ?>

あなたの質問に実際に対処するのではなく、単にプラグインの無効化に対処するための代替アプローチを提供するだけです。

問題に関しては、問題はアクティベーションフックの間にアクティベーション解除コールバックを追加しようとしていることだと思います。これは私には少し遅れているか間違っているように思われます。アクティベーションフックですが、どちらももう一方の内側にネストしていません。

4
Mark Duncan

メインプラグインファイル内:

// plugin activation
register_activation_hook( __FILE__, 'my_fn_activate' );
function my_fn_activate() {
    add_option( 'my_plugin_option', 'some-value' );
}

// plugin deactivation
register_deactivation_hook( __FILE__, 'my_fn_deactivate' );
function my_fn_deactivate() {
    // some code for deactivation...
}

// plugin uninstallation
register_uninstall_hook( __FILE__, 'my_fn_uninstall' );
function my_fn_uninstall() {
    delete_option( 'my_plugin_option' );
}
1
Webars