web-dev-qa-db-ja.com

Apply_filters()の理解に問題がある

Apply_filters()内

apply_filters( $tag, $value, $var ... );

私は頭を$value$varに巻きつけるのに問題があります。私はコーデックスを読みましたが、$valueは変更できますが、$varは変更できないように思えますが、実際にはこの例が見つかりませんでした。変数を渡す方法として使用されているようです。その場合、それと$varの違いは何ですか?

19
r00tAcc3ss

より良い名前で関数を見てみてください。

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

その関数が次のように呼ばれると:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

使えます…

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

…そしてその関数に渡される2つの変数を取得します。最初のものを返し、2番目のものはより多くのコンテキストを提供します。

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

追加の変数は、決断を容易にするためであり、それらを変更するためではありません。

34
fuxia

フィルタとは

Filters(データをデータベースに追加したりブラウザ画面に送信したりするなど、データを操作する直前に、WordPressが実行の特定の時点でデータを通過させる関数です。)ブラウザ(WordPressがページを生成しているとき)、およびブラウザとデータベース間(WordPressがデータベースに新しい投稿やコメントを追加しているとき)、WordPressのほとんどの入出力は少なくとも1つのフィルタを通過します。あなたのプラグインは独自のフィルタリングを追加することができます。

フィルタにフックする

ユーザが特定のデータ(値、関数の出力など)を変更できるようにするために、apply_filters関数を介してフィルタフックが提供されています。
これらのフィルタフックには、フィルタの名前(またはtag)と、少なくとも{filter(つまり、何らかの方法で変更する)に使用される関数名が含まれます。 ) データ。

投稿のタイトルを変更するには、次のように定義されている the_title filterフックを使用できます。

apply_filters( 'the_title', $title, $id );

つまり、フィルタはタグ/名前the_titleを持ち、最初のパラメータ$titleは変更されるデータ(つまり投稿タイトル)、2番目のパラメータ$idは追加情報(この場合は投稿ID)です。

たとえば、すべての記事のタイトルを大文字で表示するには、次の行を使用します。

add_filter('the_title', 'strtoupper');

add_filter 関数を見てみると、次のように定義されているのがわかります。

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

1番目と2番目(必須)のパラメーターのみを指定し、3番目と4番目のパラメーターはそれぞれのデフォルト値(つまり101)に設定されています。

より複雑なフィルタ

特定のpostのみをフィルタリングする)場合は、追加情報(このフィルタの場合はID)を使用できます。そのためには、パラメータの数を指定する必要があります。この場合)、またこれを行うには、priority引数(引数の数の前にくる)を指定する必要があります。

IDが42の投稿のタイトルのみに影響を与えたいとします。

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

この場合、利用可能な4つのパラメータすべてを指定する必要があります。

どんなパラメータがありますか?

特定のフィルタの利用可能なパラメータ(の数)を特定するには、それが定義されている場所を調べる必要があります(この場合は here )。


参照

10
tfrommen