apply_filters()で
apply_filters( $tag, $value, $var ... );
との周りに頭を包むのに問題が$value
あり$var
ます。私はコーデックスを読んで、$value
修正できるように聞こえますが$var
、実際にはこれの例は見つかりませんでした。変数を渡す方法として使用されるようです。その場合、それとの違いは何$var
ですか?
apply_filters()で
apply_filters( $tag, $value, $var ... );
との周りに頭を包むのに問題が$value
あり$var
ます。私はコーデックスを読んで、$value
修正できるように聞こえますが$var
、実際にはこれの例は見つかりませんでした。変数を渡す方法として使用されるようです。その場合、それとの違いは何$var
ですか?
回答:
より良い名前の関数を見てみてください:
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;
}
追加の変数は、決定を容易にするためのものであり、変更するためのものではありません。
フィルターは、WordPressが特定の実行ポイントでデータを処理する直前にデータを渡す機能です(データベースへの追加やブラウザー画面への送信など)。フィルターは、データベースとブラウザーの間(WordPressがページを生成しているとき)、およびブラウザーとデータベースの間(WordPressがデータベースに新しい投稿とコメントを追加しているとき)にあります。WordPressのほとんどの入出力は、少なくとも1つのフィルターを通過します。WordPressはデフォルトでいくつかのフィルタリングを行い、プラグインは独自のフィルタリングを追加できます。
ユーザーが特定のデータ(値、関数の出力など)を変更できるようにするために、フィルターフックはapply_filters
関数を介して提供されます。
これらのフィルターフックには、フィルターの名前(またはtag)と、少なくともデータのフィルター処理(つまり、何らかの変更)に使用される関数名が含まれます。
投稿のタイトルを変更するにthe_title
は、次のように定義されているフィルターフックを使用できます。
apply_filters( 'the_title', $title, $id );
つまり、フィルターにはtag / nameがthe_title
あり、最初のパラメーター$title
は変更されるデータ(つまり、投稿タイトル)であり、2番目のパラメーター$id
は追加情報(この場合は投稿ID)です。
たとえば、すべての投稿のタイトルを大文字で表示するには、次の行を使用できます。
add_filter('the_title', 'strtoupper');
私たちが見て取る場合add_filter
の機能を、我々は次のように定義されて参照してください。
add_filter( $tag, $function_to_add, $priority, $accepted_args );
最初と2番目(必須)のパラメーターのみを指定し、3番目と4番目のパラメーターはそれぞれのデフォルト値(つまり10
および1
)に設定されています。
特定の投稿のみをフィルタリングする場合は、追加情報を使用できます(このフィルターの場合:ID)。そのためには、パラメーターの数(この場合は2)を指定する必要があり、これを再度行うには、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)を検索する必要があります。
参考文献: