web-dev-qa-db-ja.com

dBをクリーンアップするためのプラグインのuninstall.phpファイル

uninstall.phpフックを提供することによってプラグインが削除された場合、WordPressはプラグインにdbをクリーンアップするための素晴らしい方法を提供します。あなただけのクリーニングコードを配置する必要があり、それは動作します。

しかし、私の質問は、uninstall.phpファイル内のプラグインファイルで定義されている関数を使用しているプラ​​グインをいくつか見たことです。私の理解するところでは、プラグインがすでに無効になっていて、その後ユーザーがそれを削除しようとしているのであれば、これらの機能にアクセスできないかもしれません。

私の仮定は正しいですか、私が知らないWordPressの魔法はありますか?

1
Sudar

Uninstall.phpファイル内のプラグインファイルに定義されている関数を使用しているプラ​​グインがいくつかあります。

uninstall.phpがプラグインの機能の1つを呼び出す場合、それはうまくいきません、それはFatal error: Call to undefined functionを生成します。そうでなければ・・・(下記説明)。

一方、これはうまくいきます:

<?php
/* Plugin Name: Test Uninstall */
register_activation_hook( __FILE__, 'test_activate' );
register_uninstall_hook( __FILE__, 'test_uninstall' );

function test_activate()  { update_option( 'testing_uninstall', true ); }
function test_uninstall() { test_delete_me(); }
function test_delete_me() { delete_option( 'testing_uninstall' ); }

その理由は、関数 uninstall_plugin() でわかります。 unistall.phpが存在する場合、それは含まれ、実行され、ストーリーの終わりです。
uninstall.phpファイルが存在しない場合、およびアンインストールフックを登録した場合、メインプラグインファイルが含まれます:include WP_PLUGIN_DIR . '/' . $file; - コールバックを使用可能にし、したがって他の機能も使用可能にします。

uninstall.phpファイルにいくつかのincludename__sを作成できますが、アンインストールプロセスはこれを必要とするほど複雑ですか?

関連のwpハッカースレッド からの引用(私の強調)

アンインストールフックはデータベース内に格納されており、実行時には決定されません。アンインストールフックが呼び出されたとき、あなたのプラグインはinitname __/plugins_loaded/admin_initなどのフック起動を受け取らないでしょう、それは純粋な"クリーンアップするために実行する自己保持コードがあります"

1
brasofilo