同じファイル内でインスタンス化されたクラスからなるプラグインがたくさんあります。例えば:
class My_Plugin {
function __construct() {
add_action('init', array( __CLASS__, 'baz' ) );
}
static function baz() {
// some stuff that should happen in admin
}
}
new My_Plugin();
それでは、各関数の内部の働きを条件付きで囲むようにしますが、代わりにadd_action()
ステートメントをif( is_admin() )
で囲み、サイトのそれぞれのフィルタリストを肥大化させないようにできますか。
Is_admin()はいつ利用可能になりますか?
ほとんどどこでも。私がそれが利用できないであろう場所について考えることができる唯一の例は、wp-config.php
のようなファイル、およびいくつかのドロップインの超早い段階です。しかしmu-plugin
、テーマ、またはプラグインがロードされるまでには存在します。
さて、各関数の内部動作を条件付きでラップするようにしますが、代わりにif(is_admin())でadd_action()ステートメントをラップし、サイトのそれぞれのフィルタリストを肥大化させないようにできますか
はい、しかしあなたが与えた例では代わりにadmin_init
にフックするほうが簡単です。フックに何かを追加することは高価ではありません、それはフックが起動して関数が実行されるときに起こることは高価です。
同じファイル内でインスタンス化されたクラスからなるプラグインがたくさんあります。例えば:
これは悪い習慣です、あなたはそれを疑問視する権利があります、そしてコピーされるべきではありません。クラスが定義されているのと同じファイルにオブジェクトを作成しないでください。問題が発生します。
function __construct() { add_action('init', array( __CLASS__, 'baz' ) ); }
これは、あなたがこのオブジェクトを作成した瞬間、フックを登録して物事をやり始めることを意味します。これは煩わしいこともあれば、run
またはstart
関数を持つことで簡単に回避できる問題を引き起こすこともあります。それはまた、単体テストを書くことを非常に難しくし、場合によっては不可能にします。コンストラクターはオブジェクトを作業用に準備する必要がありますが、作業は行わないでください。洗濯機を買うのと対比して服を洗うのと同じように考えてください。コンストラクタは、マシンを組み立てて準備するかもしれませんが、いつ実行されるのかを判断できると便利です。
add_action('init', array( __CLASS__, 'baz' ) ); } static function baz() {
関数bar
は静的なので、このオブジェクトが複数作成された場合、baz
は複数回実行されます。
new My_Plugin();
ここにいくつかの問題があります。
元の答えのTLDRはあなたがis_admin
が利用可能であることに頼ることができるということです、そしてあなたはそれが利用できない状況でプラグインやテーマに遭遇するべきではありません