ユーザーがプラグインをアンインストールしたときにデータベーステーブルを削除しようとしています。しかし、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プラグインページで見ることができるのは、プラグインが現在非アクティブ化されているときのactivate
とdelete
のリンクだけです。そしてdeactivate
とedit
が現在アクティブであればリンクします。 uninstall
?はどこにありますか?既に削除リンクを試しましたが、プラグインフォルダ全体を削除する以外は何もしていないようですが、データベーステーブルはまだ残っています。無傷。
質問の私のコメントで説明したように、間違いは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;
あなたがアンインストールフックやファイルに持っているものは何でも、それはそれ自身で動作するはずです。もしそうなら、それはアンインストールが起こるとき働くでしょう。