add_filterとapply_filtersの違い


17

ここadd_filter()との違いについて適切な説明を探しましたapply_filters()が、見つかりませんでした。

誰が使用する前に、add_filterまたはapply_filters1つのコンテキストでどの情報またはロジックを考慮するかを教えてもらえますか?

それは、一方ではなくもう一方を使用する必要がありますか?

  • それは正しいことadd_filterだけが変数上で実行されるのを待っている機能のキューに機能を追加し、apply_filters順番に機能を実行?

  • またapply_filters、引数(実行する関数の名前)を指定して呼び出すと、キュー内の他のすべて(存在する場合)の前にその関数を実行するのは正しいですか?


2
ここにある既存のドキュメントについてはどうですか、ここでは適切に説明できませんか?
t31os 14年

3
これは実際には良い質問だと思います。新しいワードプレス開発者として、これは紛らわしい概念になり得ます。
ショーン14

回答:


26

Codexには次のほとんどが含まれています


apply_filters

フィルターフックにアタッチされたコールバック関数$tagは、この関数を呼び出すことで呼び出されます。この関数を使用して、$ tagパラメーターを使用して指定された新しいフックの名前でこの関数を呼び出すだけで、新しいフィルターフックを作成できます。

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

本質的に:
使用apply_filtersするフィルタ所与$value-値そのものに対してだけでなく、必要に応じて設けられた変数を$var_1介して$var_n


add_filter

特定のフィルターアクションに関数をフックします。

add_filter( $tag, $function_to_add, $priority, $accepted_args );

本質的に、カスタム関数を、以前に生成した可能性のある特定のフィルターアクション()にフック
するために使用add_filter$tagますapply_filters(または、組み込みのフィルターアクションであるか、プラグイン/テーマに由来します)。


だから、ここに架空の例があります:

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

さて、関数をそのまま呼び出すと、イニシャルが左から右に出力されます。これがデフォルトの動作として定義されているからです。

2回目は、イニシャルを逆順で取得します__return_true。これは、フィルターアクションにフックされているフィルター関数が常に戻るTRUEため、イニシャルが右から左に出力されるためです。


3
これは素晴らしい答えであり、フィルターをオーバーライドする方法を示しています。ありがとう。
ショーン14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.