私はプラグインを開発していて、ベストプラクティスについて考えているだけです。グローバルオブジェクトを持つことはどれくらい一般的ですか?現在plugins_loaded
に私は私のクラスのグローバルオブジェクトを作成しています:
add_action( 'plugins_loaded', array( 'Test_Plugin', 'init' ) );
...
public static function init() {
global $testerski;
$testerski = __CLASS__;
$testerski = new $testerski;
}
これにより、global $testerski
を使用して任意の変数またはメソッドを呼び出すことができます。これは一般的なやり方ですか?
私のもう一つの懸念は、私がグローバルオブジェクトを作成しているので、そして私の理解からは、WordPressがそれらを呼び出すことができるように、どのフックもパブリック関数を持つ必要があるということです。問題は、私のグローバルオブジェクトからフック用のこれらの関数を呼び出せることです。たとえば、次のように登録されたフックがいくつかあります。
public function __construct() {
add_action( 'init', array( $this, 'test_plugin_setup' ) );
add_action( 'template_include', array( $this, 'test_templates' ) );
add_filter( 'cron_schedules', array( $this, 'test_add_monthly_schedule' ) );
}
public function test_templates( $template ) {
...
}
どちらのIが技術的に$testerski->test_templates()
を使って呼び出すことができます。この関数は実際には直接呼び出されるべきではなく、フックにしか使用されるべきではないので、このように直接呼び出されるのを防ぐことができる方法はありますか?このようなことは危険ですか、それとも私はそれをひっくり返していますか?
wp_enqueue_scripts
が間違って呼ばれたという通知をあなたに与えるように、私はいくつかのフックが警告を持っているのに気づいた。
これは一般的なやり方ではありませんが、うまくいきます。もっと良い方法は、WooCommerceや他の多くのものと同じように、クラスを使用し、シングルトンパターンを使用することです。
instance
、getInstance
...と呼ばれる)。WooCommerceの例を続けましょう。これまでは、グローバルオブジェクトにアクセスするためにこれを行っていました。
global $woocommerce;
今私達はする:
WooCommerce::instance();
# Or with the handy Shortcut
WC();
ぜひ読んでください。
メソッドの中でcurrent_filter()
の値をチェックすることはできますが、私があなたであれば、私は気にしません。これは脅威ではありません。他の開発者があなたのコードを使用したいと思うかもしれないので、それらをブロックしないでください。