register_uninstall_hook
の$callback
パラメータの説明は次のとおりです。
静的メソッドまたは関数でなければなりません。1
register_activation_hook
またはregister_deactivation_hook
に対するコメントはありません。ただし、register_activation_hook
のCodexエントリには、次のような例があります。
または、アクティベーションフックには静的関数が必要なので、__ construct()内にいる場合:2
GitHubの問題で、「静的メソッドをアクティブにする理由は何ですか?」とユーザーは述べています。
プラグインのインスタンスを起動する必要があるため、それらを標準関数として定義することはできませんが、(空であっても)コンストラクターが起動するため、アクティベーション関数を起動する前にプラグインをインスタンス化することはできません。非アクティブ化のためにプラグインを準備するために必要な準備作業を設定できるように、静的としてマークされます。
クラスを使用してプラグインを(非)アクティブ化する場合、関数は静的である必要がありますか?もしそうなら、なぜ正しいかについての説明は正しいですか?
実装方法によって異なります。クラスの関数を使用するためにクラスをインスタンス化する必要がないため、staticが使用されます。それはあなた次第です。私は通常そうします:
<?php
/*it's good practice that every class has its own file. So put it in for example 'classes/class-hooks.php' and require it properly in your plugin file. */
class Hooks{
static function activation(){
//the code you want to execute when the plugin activates
}
static function deactivation(){
//the code you want to execute when the plugin deactivates
}
static function uninstall(){
//the code you want to execute when the plugin uninstalled
}
}
...
// you should use this in your plugin file
register_activation_hook(__FILE__, 'Hooks::activation' );
register_deactivation_hook(__FILE__, 'Hooks::deactivation');
register_uninstall_hook(__FILE__, 'Hooks::uninstall');
これは私が知っている簡単な方法であり、コードを読んだプラグインは一般的にそのようにしています。お役に立てば幸いです。
#1 = my-plugin-activate.php
<?php
/**
* @package MyPlugin
*/
class MyPluginActivate {
public static function activate() {
flush_rewrite_rules();
}
}
#2-my-plugin-desactivate.php
<?php
/**
* @package MyPlugin
*/
class MyPluginDeactivate {
public static function deactivate() {
flush_rewrite_rules();
}
}
最初にクラスをインスタンス化して登録する必要があります
$ fm = new MyPlugin();
$ fm-> register();
externe activate.phpおよびdeactivate.phpファイルを要求する2つの方法があります。
register_activation_hook([〜#〜] file [〜#〜]、array($ fm、 'activate'));
または
require_once plugin_dir_path([〜#〜] file [〜#〜])。 'includes/my-plugin-activate.php'; register_desactivation_hook([〜#〜] file [〜#〜]、array( 'MyPluginActivate'、 'activate'));
deactivateでも同じです