web-dev-qa-db-ja.com

クラスのアクティブ化/非アクティブ化関数は静的である必要がありますか?

register_uninstall_hook$callbackパラメータの説明は次のとおりです。

静的メソッドまたは関数でなければなりません。1

register_activation_hookまたはregister_deactivation_hookに対するコメントはありません。ただし、register_activation_hookのCodexエントリには、次のような例があります。

または、アクティベーションフックには静的関数が必要なので、__ construct()内にいる場合:2

GitHubの問題で、「静的メソッドをアクティブにする理由は何ですか?」とユーザーは述べています。

プラグインのインスタンスを起動する必要があるため、それらを標準関数として定義することはできませんが、(空であっても)コンストラクターが起動するため、アクティベーション関数を起動する前にプラグインをインスタンス化することはできません。非アクティブ化のためにプラグインを準備するために必要な準備作業を設定できるように、静的としてマークされます。

クラスを使用してプラグインを(非)アクティブ化する場合、関数は静的である必要がありますか?もしそうなら、なぜ正しいかについての説明は正しいですか?

6
Spencer

実装方法によって異なります。クラスの関数を使用するためにクラスをインスタンス化する必要がないため、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

私のプラグインフォルダーには、phpという2つのファイルを持つ人を含む名前のフォルダーを作成しました

#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();
   }
} 

私の主なファイルphp:my-plugin.phpでは、クラスMyPluginの下部にこの2つのファイルが必要です

  1. 最初にクラスをインスタンス化して登録する必要があります

    $ fm = new MyPlugin();

    $ fm-> register();

  2. 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でも同じです

enter image description here

0
zahafyou