LoginSignup
3

More than 5 years have passed since last update.

WordPress プラグイン開発 - アンインストール処理

Last updated at Posted at 2018-10-22

プラグインがアンインストールされる際に、プラグインに関する設定や独自に作成したデータベースのテーブルを削除する必要があります。
アンインストール処理を記述する方法としては二通りあります。

  1. Uninstall Hookに登録する
  2. uninstall.phpファイルを用意する

また、ユーザがプラグインをアンインストールする手順の流れとして

  1. まずプラグインを無効にする
  2. それから削除する

という流れとなりますが、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公式のプラグインに申請すると指摘され差し戻されます。

uninstall.php
// 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( ... );

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3