CodaholicCodaholicRSS2012年01月10日に投稿[WordPress]プラグインとして追加できるフィルター機能はどのように実現されているのかadd_filter関数はオリジナルのフィルター関数を登録するための関数で、フィルター関数を登録するとWordPressが出力するあらゆるデータを加工して出力を行うことができます。apply_filters関数は登録されたフィルター関数を実行するための関数です。どのような仕組みで実現されているのか気になったのでソースコードを確認しました。完全にトレースできたわけではありませんが、メモを兼ねて記事として公開します。バージョン3.1.3のソースコードとなります。下記のようなコードをプラグインファイルに記述してpluginディレクトリにアップロードすると、全ての記事タイトルに(こんにちは)という文字列が連結されて表示されます。これはadd_filter関数によって登録されたフィルター関数がapply_filters関数によって、画面に出力される前に(こんにちは)という文字列を連結させる処理を実行しているためです。下記のように定義されています。追加するフィルター関数にidをユニークな振ります。フィルターをかけるタグ、優先度、idで構成された連想配列にフィルター関数名とそのフィルター関数が受け取る引数の数を書き込みます。追加するフィルター関数にidをユニークな振ります。フィルターをかけるタグ、優先度、idで構成された連想配列にフィルター関数名とそのフィルター関数が受け取る引数の数を書き込みます。true;}続いてapply_filters関数です。下記のように定義されています。対してフィルター関数が登録されていたら実行します。フィルターをかけようとしているフィルタータグに対してフィルター関数が登録されていなければ出力をそのまま返して処理を終了します。優先度順にフィルター関数を並べ替えます。配列のポインタを元に戻します。$argsにまだ引数を書き込んでいなければここで引数を全て取得します。今、実行しているフィルタータグに登録されているフィルター関数を順番に実行します。next関数によって配列のポインタを1つ先に進めます。次の優先度の配列が参照されます。フィルター適用後の結果を返します。対してフィルター関数が登録されていたら実行します。フィルターをかけようとしているフィルタータグに対してフィルター関数が登録されていなければ出力をそのまま返して処理を終了します。優先度順にフィルター関数を並べ替えます。配列のポインタを元に戻します。$argsにまだ引数を書き込んでいなければここで引数を全て取得します。今、実行しているフィルタータグに登録されているフィルター関数を順番に実行します。next関数によって配列のポインタを1つ先に進めます。次の優先度の配列が参照されます。フィルター適用後の結果を返します。いう配列であり、[‘function’]というラベルと[‘accepted_args’]というラベルを持っています。foreach構文により現在の$priority配列を$the_として処理を行います。39行目の補足apply_filters関数に渡された引数を、accepted_argsで指定した数だけフィルター関数に渡して実行します。apply_filters関数の第1引数はフィルタータグなので、第2引数以降がフィルター関数に渡される引数になります。そのためarray_slice関数で0番目の要素は対象になっていません。$wp_current_filterと$merged_filtersについては調査中としました。これらの処理の中だけではあまり意味を持っていないようなので、他の処理との兼ね合いを見る必要がありそうです。僕のレベルでWordPressのソースを読むと非常に骨が折れますが勉強になる箇所が多いです...引き続きWordPressのソースコード解析を続けたいと思います。Reply返信をキャンセルする。(1)ドメインを取得できるサービス。