web-dev-qa-db-ja.com

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

私はafter_setup_themeを使ってセットアップを含むテーマを持っていますが、after_setup_themeを実行する必要がある私自身の関数を書きたいと思います。私は自分のものを別のファイルに保存したいと思います。 after_setup_themeを複数回呼び出すことはできますか?

8
Amanda

WordPressフックはハリウッドのように機能します。あなたはそれらを呼び出すのではなく、呼び出します。しかし、ハリウッドとは異なり、彼らはリストの全員を呼び出し続けます。

アクションまたはフィルターが、異なるプラグイン、または単に異なる複数の関数にフックされることは通常です WordPressコア内の関数はすべて特定の何かを行う 。コードがより明確になり(各関数が1つのことだけを行う)、特定の機能の一部をフック解除することで簡単に無効にできるため、可能なだけでなく、優れたプラクティスですらあります。

フックの優先順位で遊ぶこともできます:after_setup_themefunctionA()functionB()の両方を実行したいが、functionA()functionB()の前に実行する必要がある場合は、functionA()をデフォルトの優先順位10functionB()で優先順位20(またはその他の10を超える数)。動作しないのは、そのアクションの実行中に別の関数をアクションにフックすることです。そのため、after_setup_themeで呼び出されるfunctionB()からfunctionA()after_setup_themeにフックすることはできません。直接呼び出すこともできますが、別のフックの利点を失うことになります。

25
Jan Fabry

あなたがそうするならば、私の提案はあなたの他のすべての機能を呼び出す「マスター」機能を持つことでしょう。そのようにあなたは一度だけその行動に引っ掛かる必要があります。

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 */}

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

6
Aaron Wagner

はい、あなたはあなたが望むのと同じくらい多くのアクションをフックに追加することができます。やってみなよ。

4
fuxia