同じアクションに何回フックできますか?


8

私はいくつかの設定を含むテーマを使用してafter_setup_themeいますが、実行する必要がある独自の関数を書きたいのafter_setup_themeですが。私は自分のものを別のファイルに保存したいと思います。after_setup_theme複数回通話できますか?

回答:


27

ワードプレスのフックはハリウッドのように機能します。あなたはそれらを呼ばず、彼らはあなたを呼びます。しかし、ハリウッドとは異なり、彼らはリストの全員に電話をかけ続けます。

アクションやフィルターが、さまざまなプラグインから、またはWordPressコアのさまざま関数にフックされた複数の関数を持っていることは正常です。コードがより明確になり(各関数は1つのことだけを実行します)、特定の機能をアンフックすることで簡単に無効化できるため、これは可能であるだけでなく、良い習慣です。

あなたはまた、フックの優先順位と遊ぶことができることに注意してください:あなたは両方を実行する場合functionA()functionB()after_setup_themeはなく、functionA()前に実行しなければならないfunctionB()、あなたはフックすることができfunctionA()、デフォルトの優先順位と10し、functionB()優先度で20(または10以上の任意の他の数)。機能しないのは、アクションの実行中に別の関数をアクションにフックすることです。したがってfunctionB()after_setup_themeからfunctionA()呼び出されてにフックすることはできませんafter_setup_theme。直接呼び出すこともできますが、個別のフックの利点は失われます。


7

私の提案は、可能であれば、他のすべての関数を呼び出す「マスター」関数を用意することです。そうすれば、そのアクションに1回フックするだけで済みます。

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

これには、後続の関数呼び出しで使用できる値を返すことができるという追加の利点があります。


4

はい、フックにはアクションをいくつでも追加できます。やってみなよ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.