web-dev-qa-db-ja.com

WordPressプラグインのアンインストールはどのように機能しますか?

ユーザーがプラグインをアンインストールしたときにデータベーステーブルを削除しようとしています。しかし、WordPressプラグインをアンインストールすることは本当にどういう意味ですか?

無効化フックがあり、アンインストールフックもあります。そしてuninstall.phpファイルがあります。

プラグインクラスのコンストラクタにアンインストールフックがあります。

register_uninstall_hook(__FILE__, array($this, 'uninstall_Housekeeping'));

それでuninstall_Housekeepingメソッドは次のようなコードになります。

public function uninstall_Housekeeping(){

global $wpdb;
$tweets_table = $wpdb->prefix . 'zam_tweets';

require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta("DROP TABLE $tweets_table");
}

ワードプレスのコーデックスによれば、プラグインがアンインストールされたときに実行されるコードを含むuninstall.phpファイルが必要です。そのため、このコードも追加します。

if (!defined('WP_UNINSTALL_PLUGIN'))
exit();
global $wpdb;
$tweets_table = $wpdb->prefix . 'zam_tweets';

require_once ABSPATH . 'wp-admin/includes/upgrade.php';
dbDelta("DROP TABLE $tweets_table");

しかし、私がWordPressプラグインページで見ることができるのは、プラグインが現在非アクティブ化されているときのactivatedeleteのリンクだけです。そしてdeactivateeditが現在アクティブであればリンクします。 uninstall?はどこにありますか?既に削除リンクを試しましたが、プラグインフォルダ全体を削除する以外は何もしていないようですが、データベーステーブルはまだ残っています。無傷。

1
Wern Ancheta

質問の私のコメントで説明したように、間違いはDROP TABLEがどのように実行されているかに確かにあります。しかし、に答えると、WordPressプラグインのアンインストールはどのように行われるのでしょうか?

プラグインでregister_uninstall_hookを実行すると、コールバックは uninstall_plugins/wp-includes/plugin.phpオプションに格納されます。

$uninstallable_plugins[plugin_basename($file)] = $callback;
update_option('uninstall_plugins', $uninstallable_plugins);

関数register_uninstall_hookのPHPDocでは、これがあります。

このファイル(uninstall.php)は、存在する場合、アンインストールフックを迂回するアンインストールプロセス中に呼び出されます。

そしてバイパスは /wp-admin/includes/plugin.php で起こります:

define('WP_UNINSTALL_PLUGIN', $file);
include WP_PLUGIN_DIR . '/' . dirname($file) . '/uninstall.php';
return true;

あなたがアンインストールフックやファイルに持っているものは何でも、それはそれ自身で動作するはずです。もしそうなら、それはアンインストールが起こるとき働くでしょう。

1
brasofilo