フックそのものを新たに作る関数が、apply_filters()とdo_action()である。apply_fiters()には返り値があり、do_action()にはない。
フィルターとはDBとブラウザの間に存在して、DB → ブラウザあるいはブラウザ → DBの間を行き来するデータを修飾する働きを担う関数(=コールバック関数)のこと。つまりWordPressではDB → フィルタ → ブラウザ、あるいはブラウザ → フィルタ → DBという流れでデータが動く。
アクションとはWordPressの決まったタイミングで実行されるコールバック関数である。フィルターとは別物。
WordPressのコアとはフィルターフック(タグ)とアクション(タグ)の集合体であろうと想像される。そのデフォルトの挙動をカスタマイズするために、フィルターフックにはフィルターをアクションフックにはアクションを追加したり、削除したりするのである。
フィルターもアクションも実体は単なる関数である。そしてユーザーが自由に追加したり、削除することができる。
add_filter(),remove_filter(),add_action(),remove_action()。
apply_filters()
apply_filters()によって、フックを作成する。1つのフックは複数のフィルターから構成されている。
apply_filters(
$タグ(=フック名), // このタグをadd_filter( $タグ, ‘callback’ );として使用する
$ユーザが変更できる値, // 即ちこれがフィルターにかける元データ
$context_1, // 変更できず参照のみできるデータ。文脈の条件判断などに用いる。
$context_2 // 文脈データ2
);
apply_filters($tag, $value) は、’value’の値を’tag’で指定されたフックの各関数に引き渡す。各関数(フィルタ)は引数に処理を加え返り値を、次の関数に引数として連続的に渡していく。つまりフィルターは複数を連続的に設定することも可能。通常は1つか?
常識的に考えて、apply_filters()は$valueの値をフックされたCBFで連続的に書き換えていき、書き換えられた値を用いて何らかの処理をするのであろう。つまりapply_filters()の返り値が実際にDBやブラウザに出力されるデータとなる。
add_filter()
add_filter()によって、apply_filters()が作成したフックにフィルタを追加する。
add_filter(
“タグ(=フック名)”,
“コールバック関数名”,
“コールバック関数の優先順位”,
“コールバック関数の引数の数”
);
add_filters()の引数の数(厳密には、タグ名を除いた引数の数)と、コールバック関数が取る引数の数は同じでないと辻褄が合わない。というか全く同じものが引き渡されてくるはずである。
add_filter()でコールバック関数の引数の数を指定しなければいけない理由は不明である。
「フィルターフック」と「アクションフック」があるそれぞれ、add_filter()、add_action()という関数を用いてCBFを紐付けることができる。
タグとはフック名のことである。いきなりタグという別の用語が出てくるので混乱を招く。フック名と読み替えた方がよい。
フックにフィルタ関数を紐付けることは、グローバルフィルター配列(global $wp_filters)にコールバック関数名を追加することである。
do_action()
do_action() ないし apply_filters()がコールされると、WordPressはフィルター配列を検索し、コールバック関数を呼び出す。 アクションとフィルターの違いは、アクションが単にコールバック関数を呼び出すだけなのに対し、フィルターは値を返すという点である。要確認。
コメント