回答:
こんにちは@Sruly:
あなたは自分の質問にほとんど答えましたが、少し詳しく説明します。
アクションフックは、WordPressコアまたは一部のプラグインまたはテーマが特定の時点でコードを挿入し、次の1つ以上を実行する機会を提供する場合に使用することを目的としています。
echo
に挿入するために使用します。do_action_ref_array()
代わりにフックが呼び出されたと仮定します)。do_action()
フィルターフックの動作はアクションフックに非常に似ていますが、その用途は値を受け取り、変更されたバージョンの値を返すことです。フィルターフックは、アクションフックのように使用することもできます。つまり、フックが呼び出されたときに行う必要があることを前提として、グローバル変数を変更したり、HTMLを生成したりします。アクションフックについて心配する必要のないフィルターフックについて非常に重要なことの1つは、フィルターフックを使用するユーザーが、渡された最初のパラメーター(の修正バージョン)を返す必要があることです。一般的な初心者の間違いは、その値を返すことを忘れることです!
余談ですが、WordPressの以前のバージョンではフィルターフックが1つしかパラメーターを受け取らないため、フィルターフックが詰まっていると感じました。つまり、変更する値を取得しますが、コンテキストを提供するための2番目または3番目のパラメーターは取得しません。しかし、最近、そして積極的に、WordPressコアチームが喜んで(私にとって)フィルターフックに追加のパラメーターを追加して、より多くのコンテキストを発見できるようにしているようです。良い例がposts_where
フックです。いくつかのバージョンは、現在のクエリの「where」クラスSQL であるパラメーターを1つしか受け入れなかったが、今ではwhere句とWP_Query
、フックを呼び出すクラスの現在のインスタンスへの参照の両方を受け入れると考えています。
実際には、フィルターフックはほとんどアクションフックのスーパーセットです。前者は後者ができることを何でも行うことができ、開発者はフィルターフックで行うアクションフックで値を返す責任がありませんが、もう少しです。
しかし、それはおそらく重要ではないでしょう。重要なのは、アクションフックとフィルターフックのどちらを使用するか、またはその逆を選択する開発者がその意図を電信しているため、フックを使用する可能性のあるテーマ開発者またはプラグイン開発者にガイダンスを提供することです。本質的に、彼らは「私はあなたに電話します、あなたがする必要があることは何でもします」 または 「私はこの値を変更するためにあなたに渡すつもりですが、あなたはそれを返すようにしてください」と言っています。
それで、最終的に、私はフックタイプの選択によって提供された指導が区別の後ろの本当の値だと思います。とにかく、IMO。
お役に立てれば!
add_action()
コア関数のソースを見ると、それは関数の単なるラッパーですadd_filter()
...
do_action()
コア関数を見ると、コア関数と非常によく似ていapply_filters()
ますが、1つの非常に重要な違いがあります:値を返しません。
これはどういう意味ですか?アクションはフィルターに似ていますが、アクションは値を返さないため、データを変更できません。フィルタメカニズムをコピーするだけで、値を返さずにWordPressのアクションメカニズムを作成するのが簡単だったことを示しています。基本的に、アクションでできることは、値を変更せずに関数を実行するだけです。
簡単な言葉で。
アクション は、出力を実行するPHP関数です。
フィルター は、出力を返すPHP関数です。
更新:コードを変更せずに、アクションとフィルターを使用するプラグインを拡張できます。独自のテーマまたはプラグインにフィルターとアクションを追加する。
テーマfunctions.php
ファイルの以下の簡単な例を確認してください。
機能テスト() { echo "出力"; } テスト();
上記のプログラムは出力を印刷します:
出力
[注:ここでtest()は単に関数を呼び出します。そして、コールバック関数 'test'を実行します。]
関数test1(){ echo "出力"; } add_action( 'test'、 'test1'); do_action( 'test');
上記のプログラムは出力を印刷します:
出力
[注:ここでdo_action('test')
は、関数を呼び出すように動作します。そして、コールバック関数 'test1'を実行します。]
関数test2(){ echo "テスト2"; } add_action( 'test'、 'test2'、1); 関数test1(){ echo "テスト1"; } add_action( 'test'、 'test1'、2); do_action( 'test');
上記のプログラムは出力を印刷します:
テスト2テスト1
[注:ここでdo_action('test')
は、関数を呼び出すように動作します。そして、その優先度でコールバック関数を実行します。
コールバック関数「test1」には優先度2があり、「test2」には優先度1があります。
優先度が優先度1の「test1」および優先度2の「test2」のように変更される場合、出力は次のようになります。
テスト1テスト2
functions.php
関数test1(){ do_action( 'test_before'); echo "テスト1"; do_action( 'test_after'); } add_action( 'test'、 'test1'); do_action( 'test');
上記のプログラムは出力を印刷します:
テスト1
次に、サンプルプラグインを作成して、サードパーティの開発者にとってどのように機能するかを確認します。
/wp-content/plugins/
。/ * *プラグイン名:シンプルプラグイン * / 関数test_callback_function(){ echo "プラグインから"; } add_action( 'test'、 'test_callback_function');
次に、WordPress管理ダッシュボードからSimpleプラグインを有効にします。
メニュープラグインに移動してアクティブにします。
上記のプログラムのプラグインをアクティブにした後、出力を印刷します。
テスト1プラグインから
[注:プラグインアクションの優先度を1〜9に追加すると、次のように出力が出力されます。
pluginTest 1から
WordPress 10 priority by default
は追加されたすべてのアクションを考慮しているためです。]
以下の例を確認してください。
単純なPHPの例:
$ data = array( 'one'、 'two'); print_r($ data);
上記のプログラムは出力を印刷します:
配列([0] => one [1] => two)
$ data = apply_filters( 'my_filter_name'、array( 'one'、 'two')); print_r($ data); add_filter( 'my_filter_name'、function($ old_data){ return array( 'three'、 'four'); });
上記のプログラムは出力を印刷します:
配列([0] => three [1] => four)
ここで、フィルターmy_filter_name
を追加し、テーマ/プラグインファイルを変更せずに既存の出力array( 'one', 'two' )
をarray( 'three', 'four' )
変更しました。