web-dev-qa-db-ja.com

register_uninstall_hook()vs uninstall.php - プラグインのアンインストールスクリプトを処理するためのより良い方法はどれですか?

今日、WP Codexの中を見ながら、プラグインのアンインストールスクリプトを処理する2つの方法(削除、オプション、データ、テーブルなど)を見ました。一つの方法はregister_uninstall_hook()を使うことで、もう一つの方法は単純なuninstall.phpを使うことです。

codexページ には両方についての多くの情報が記載されていますが、どちらを使用することの利点が何であるかについては説明していません。

ここには非常に多くのWPの教祖がいるので、私はどのオプションがアンインストールスクリプトを扱うより良い方法についてこの質問をするべきであると思いましたか? register_uninstall_hook()uninstall.phpのどちらを使う?

誰かが明確にすることを願っています。前もって感謝します。

7
iSaumya

uninstall.phpの利点と、それが導入された理由は、プラグインの残りのコードからアンインストールコードを分離できることです。これは、アンインストール時にプラグイン全体をロードする必要がないことを意味します。これにより、プラグインがアクティブな場合にのみ実行されることを意図したアンインストール中に、プラグインが誤ってコードを実行する可能性が最小限に抑えられます。ただし、一般的には、とにかくプラグインファイルで任意のコードを実行しないでください。ほとんどのすべては、フックによってトリガーされた場合にのみ実行する必要があります。

元のコミットに含まれるドキュメント から:

プラグインは、アンインストールフックを登録するときに、関数の外部で任意のコードを実行しないでください。フックを使用して実行するには、プラグインを含める必要があります。つまり、関数の外側にあるコードはアンインストールプロセス中に実行されます。プラグインはアンインストールプロセスを妨げるべきではありません。

プラグイン内でコードを実行せずにプラグインを作成できない場合、プラグインはベースプラグインフォルダーに「uninstall.php」という名前のファイルを作成する必要があります...

TL; DR:プラグインは、実際にはhaveを持たないように構成する必要がありますunisntall.phpを使用しますが、それを使用すると、アンインストール中に誤って実行することに対する保護が追加されます。

もちろん、場合によっては適切にアンインストールするためにプラグインの一部をロードする必要があるかもしれません。ただし、uninstall.phpを使用している場合、これらのファイルを含めることは意識的に決定されるため、任意のコードを実行するプラグインのファイルを誤って読み込むのは困難です。

register_uninstall_hook()メソッドを使用するのは、非常に単純な単一ファイルのプラグインのみで、すべてのコードが単一のクラスにカプセル化されます。


uninstall_plugin()pre_uninstall_pluginを実行することに注意してください およびuninstall_{$plugin_file} [編集:uninstall_{$plugin_file}は、register_uninstall_hook()が使用されている場合にのみ実行されます]使用するメソッドに関係なく、アクションフック。 (チケットを参照してください #34569 。)

5
J.D.

まあ、それはあなたが望むものに依存します。 register_uninstall_hook()はフックを作成し、uninstallリンクがクリックされたときに実行されます。つまり、アンインストールリンクをクリックすると呼び出されるフックを実際に作成します。プラグインを開発し、そのプラグインに基づいて他のプラグインを作成し、プラグインに追加するプラグインをベースとしたプラグインのアンインストールで操作を実行する必要があるとします。 ここ あなたは完全な概要を得るでしょう。

そしてuninstall.phpはあなたのプラグインのための一般的なアンインストーラです。プラグインのアンインストール時に起動します。しかし、デフォルトではフックは提供されません。

詳しくは こちら をご覧ください。

1
CodeMascot