適切なフィルタフックを探す

WordPress では、アクションまたはフィルタをフックして、WordPress 本体の処理結果や方法をプラグインで変更することができます。
( see. プラグイン API – WordPress Codex 日本語版 )

自動で何かをする系のプラグインを開発する際は、まずどのアクションフック or フィルタフックが使えるのかを調査することから始めます。
codex のプラグイン API/アクションフック一覧, フィルターフック一覧から探すのが一般的だと思いますが、私の場合は WordPress のソースから使えそうなアクションフック・フィルタフックを探します。
この辺のノウハウってあまり文章化されていないようなので、私のやり方を簡単にまとめておきます。

アクションフック・フィルタフックを探す

WordPress ソースからの探し方ですが、ソースを全部読んでたら日が暮れるので、それらしいところのニオイを嗅ぎ分ける鼻が必要になります。
以下の2点に注意して、ソース内を探検していきます。

  • アクションフックが適用されるのは、関数 do_action() が実行された時
  • フィルタフックが適用されるのは、関数 apply_filters() が実行された時

ちなみに do_action(), apply_filters() は、どちらもグローバル変数の $wp_filter に登録されているフィルタに対して動作するので、これ以降はアクションフック・フィルタフックとも、まとめてフィルタフックと呼びます。

wp-includes/default-filters.php を眺めて見るのもアリですね。
こちらにはデフォルトで登録されているフィルタフックが確認できますので、どのフィルタフックを使えば良いかってのは、分かりやすいです。

あとは、やりたいことと似たようなことをしている既存の WordPress プラグインのソースを見るのもアリです。
その場合は add_filter(), add_action() を探してみてください。

実際の例

前回、フィードテンプレートの変更方法を調査した時は、以下の順で探索しました。

  1. フィードのテンプレートとして feed-rss.php が読み込まれているのは分かっていたため、WordPress のソースを grep して feed-rss.php を読み込んでいるところを探索
    → wp-includes\functions.php の do_feed_rss() で読み込んでる。
  2. do_feed_rss() をフィルタフックしているところを探索
    → wp-includes/default-filters.php の中で add_action('do_feed_rss', 'do_feed_rss', 10, 1); している。
    他の形式のフィードも、add_action() されていることを確認。
  3. このフィルタフックを実際に起動している箇所をフィルタフック名で探索
    → do_feed_rss では見つからなかったが、wp-includes\functions.php の do_feed() 内で 'do_feed_' . $feed を do_action() しているところを発見。
  4. do_feed() を実際に呼んでいるところを探索
    → wp-includes/template-loader.php の中で is_feed() なら、この関数を呼んでる。ビンゴ!
    # まぁ、最初から wp-includes/template-loader.php を見れば、すぐに分かったんですが (^^;;;

こんな感じで、探索しました。
参考になりますでしょうか?

3 thoughts on “適切なフィルタフックを探す

  1. ピンバック: WordPressのフィードに関する覚え書き | Gatespace's Blog

  2. ピンバック: WordPressのフィードに関する覚え書き | Gatespace's Blog

  3. ピンバック: wordpressでリダイレクトのループにはまる

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください