WordPressで立つ鳥あとを濁さずなプラグインをつくる

WordPressプラグインで生成したテーブルをプラグインアンインストール時に削除する方法について、twitterでゴチャゴチャ話していたら、Contact Form 7の作者の@takayukisterさんから、いいことを教えていただきました。

紹介していただいたサイトを拝見すると、プラグインのアンインストール時に、不要となったテーブルやファイルなどの削除を行うなどの後片付けを行うには、以下の二つの方法があるそうです。

  • プラグインディレクトリの中に、uninstall.php を設置する。
  • register_uninstall_hook() を使用する。

プラグインディレクトリの中にuninstall.phpを設置する。

手元の環境で確認したところ、プラグインのディレクトリの中にuninstall.phpを設置して、以下のような後片付けを行う処理を記述すれば、プラグインの削除時にインクルードされて不必要なデータを削除することができます。

<?

if( !defined( 'ABSPATH') && !defined('WP_UNINSTALL_PLUGIN') )
    exit();

delete_option('my_option'); // あと片付け

?>

if の条件分岐については詳しく検証していませんが、Codexに以下のような記載があるので、忘れないように注意しましょう。

Function Reference/register uninstall hook « WordPress Codex

When using ‘uninstall.php’ the plugin should always check for the WP_UNINSTALL_PLUGIN constant, before executing.

register_uninstall_hook() を使用する。

register_uninstall_hook() を使用する方法については、以下のように Codex でも説明がありました。

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

サンプルは以下のような感じになります。

if ( function_exists('register_uninstall_hook') )
    register_uninstall_hook(__FILE__, 'my_uninstall_hook');

function my_uninstall_hook()
{
    delete_option('my_option');
}

WP Total Hacksではどうしてんの?

WP Total Hacksでは、add_option()を使用して設定項目を保存していますが、各設定項目が空白の場合はdelete_option()を実行するようになっておりますので、アンインストール後にもそれほどご迷惑をおかけしない仕様になっていると考えています。

でも、次のバージョンアップでは、どちらかの方法でオプションを掃除するよう修正します。