1. HOME
  2. 開発・ブログ運営
  3. WordPress
  4. WordPress プラグインをカスタマイズする場合は、apply_filters() を探せ!
2012年05月18日
(続)WordPress が 勝手に<p>タグを入れない ...
2016年07月23日
WordPress で全ての記事ページが 404 Not Fo ...
2012年02月12日
WordPress3 でブログを立ち上げて初めに行った設定いろ ...
2012年07月04日
初心者向け WordPress プラグイン作成 に関する覚書 ...
2012年10月16日
WordPress のサイドバーに呟きを表示させる Twitt ...
2012年11月12日
WordPress の記事抜粋( the_excerpt() ...

WordPress プラグインをカスタマイズする場合は、apply_filters() を探せ!

なんとなく、WordPress のフィルター機能について理解できた(つもりになっている)ので確認の意味も含めてエントリしします。

WordPress で何かの機能を追加したいな、と思った時はたいがい誰かがプラグインを作成してくれています。

私も便利にプラグインを利用させてもらっている訳ですが、たまにプラグインで出力してくれるタグ(表示)を修正したりと、プラグインをカスタマイズしたい場合があります。

その場合、プラグインのソースコードを修正しても良いのですが、プラグインがアップデートされるたびに修正内容が上書きされてしまい、ちょっと不便。

なので、極力プラグインのソースコードを修正する事は避けたい。

じゃあ、どうするか?という話ですが、プラグインのソースコードの中で、「apply_filters()」という関数がないか調べます。

この関数は、フィルターフックに追加された関数を呼び出す関数です。

参考:関数リファレンス/apply filters – WordPress Codex 日本語版

例えば、WordPress と Twitter を連携してくれる定番プラグインの Twitter Tools を例にすると、

Twitter Tools の中(/wp-content/plugins/twitter-tools/twitter-tools.php )で実際につぶやきを出力する処理(aktt_tweet_display 関数:360行目あたり)では、「 $output 」という変数に出力用のタグを格納しています。

こんな感じ。

その後、return $output する訳ですが、return する前に、

と、apply_filters() があります。

これの意味は、必要に応じて aktt_tweet_display というフィルター(一番目の引数)で、$output の中身を修正してね、ということになります。

aktt_tweet_display というフィルターがなければ、$output は何も修正されずに、そのまま return されます。

ようは、プラグイン作者があらかじめ、プラグインユーザーが容易にカスタマイズできるように適切な場所に apply_filters() によって、プラグインユーザーの拡張性を確保している訳です。

素晴らしい。

すべてのプラグインがこのような apply_filters() によって、フィルターフックを用意している訳ではありませんが、プラグインをカスタマイズするときは、まずは、apply_filters() を探して、apply_filters() が見つかれば、そのフィルターフックを用いて、カスタマイズするべきです。

フィルターフックを使ってみる

カスタマイズしたいプラグインに apply_filters() があった場合には、それを利用してカスタマイズします。

具体的には、apply_filters() されているフィルターを functions.php に記述します。

例えば、先ほどの例(Twitter Tools)で言えば、出力するつぶやきを格納している $output に、

というフィルターが適用されています。

apply_filters() の1番目の引数(aktt_tweet_display)がフィルター名で、2つ目以降の引数($output と $tweet)がフィルターに渡されます。

ただ、aktt_tweet_display というフィルターはどこにも存在しません。プラグイン作者が勝手につくったフィルターフックです。

なので、まずは functions.php に、

というフィルター(関数)を定義します。

フィルター(関数)の返り値は、プラグインの apply_filters() を見れば、

となっていて、$output が返されることを期待してますので、 return $output とします。関数全体はこんな感じ。

あとは、今回定義した my_tweet_display() 関数をフィルターとして登録するために

を追加します。add_filter() の引数は、一番目(aktt_tweet_display)がフィルターフック名(apply_filters() された名前)、二番目の引数がフィルターの実装(関数名)です。

参考:関数リファレンス/add filter – WordPress Codex 日本語版

まとめると、

というフィルターフックが定義されている場合、

を functions.php に記述してあげればおっけー

あとは、元のソースコードを見て、$output には元々何が入っているのか? $tweet には何が格納されているのか?を確認して、自由に $output の内容を修正するコードを書けくだけです。

すべてのプラグインが、適時 apply_filters() を用意してくれているわけではありませんが、プラグインをカスタマイズする場合は、まずは apply_filters() を探して、apply_filters() があった場合には、functions.php にフィルター(関数)を作成してカスタマイズすると良いと思います。

フィルターフックを用いてカスタマイズした場合、元に戻したいときは、functions.php のフィルター(関数)をコメントアウト(又は削除)するだけで済みますし。

それでは、じゃんじゃん apply_filters() 探して、add_filter() しちゃってください。

でわでわ。








「WordPress プラグインをカスタマイズする場合は、apply_filters() を探せ!」に頂いたコメント & トラックバック

  1. […] WordPress プラグインをカスタマイズする場合は、apply_filters() を探せ … […]

  2. aki より:

    この記事のおかげで結婚できました!(殴
    じゃないですけど、衝撃的にわかりやすかったです!
    初めて理解できました。

    感謝です!
    ありがとうございました。

この記事にコメントする





Copyright © 2012 - 2014 MacBook Air とWordPressでこうなった All rights reserved
Powered by WordPress.