プラグインがアンインストールされる際に、プラグインに関する設定や独自に作成したデータベースのテーブルを削除する必要があります。
アンインストール処理を記述する方法としては二通りあります。
- Uninstall Hookに登録する
- uninstall.phpファイルを用意する
また、ユーザがプラグインをアンインストールする手順の流れとして
- まずプラグインを無効にする
- それから削除する
という流れとなりますが、WordPress にはこの2つの手順用にそれぞれDeactivation Hook(無効時に呼ばれる)とUninstall Hook(削除時に呼ばれる)が用意されています。
1: Uninstall Hookを利用する(register_uninstall_hook)
Uninstall Hookを利用するには、register_uninstall_hook()関数を使用します。
// プラグイン削除時に呼ばれる処理を登録する
register_uninstall_hook( string $file, callable $callback );
// 例
function myplugin_activate() {
// プラグインが有効となったときにアンインストール処理をフックする
register_uninstall_hook( __FILE__, 'myplugin_uninstall' );
}
register_activation_hook( __FILE__, 'myplugin_activate' );
function myplugin_uninstall() {
// アンインストール処理
}
プラグイン無効化時にも何か処理したい場合には、register_deactivation_hook()関数も利用できます。
// プラグイン無効時に呼ばれる処理を登録する
register_deactivation_hook( string $file, callable $function );
// 例
function myplugin_deactivate() {
// プラグインが無効となったときの処理
}
register_deactivation_hook( __FILE__, 'myplugin_deactivate' );
2: uninstall.php ファイルを利用する
プラグインのルートフォルダ内にuninstall.phpファイルを作成します。
ユーザがプラグインを削除するとWordPressから自動的に実行されます。
WordPressはWP_UNINSTALL_PLUGIN定数を定義してからuninstall.phpを呼び出します。
uninstall.php 側はファイルの先頭でWP_UNINSTALL_PLUGIN定数が定義されているかチェックを行い、直接アクセスされることを防止する必要があります。
このチェックが抜けている状態でWordPress公式のプラグインに申請すると指摘され差し戻されます。
// WP_UNINSTALL_PLUGINが定義されているかチェック
if (!defined('WP_UNINSTALL_PLUGIN')) {
die;
}
$option_name = 'wporg_option';
// オプション設定の削除や
delete_option($option_name);
delete_site_option($option_name);
// データベースのテーブル削除、などなど
global $wpdb;
$wpdb->delete( ... );