WordPressプラグイン処理の実行後にフックして処理を追加挿入する方法 – add_filter()の優先順位の変更
WordPressのプラグインの処理が実行された後に処理を追加する方法を紹介
WordPressでは、いろいろな処理が実行される直前や直後に、処理を追加挿入することができます。この仕組みは「フック」と呼ばれており、WordPressでは非常に重要となる機能です。
たとえば、皆が好んでよく利用する一般的なプラグインもこの「フック」を利用しています。通常の処理に加えて、プラグインの処理を追加で挿入することで、実行結果にプラグインの機能を反映しているのです。
このフックという仕組みを利用して、今回はプラグインの処理が実行された後に、処理を追加で挿入する方法を紹介します。
- 目次 -
フックの処理はadd_filter()関数を利用する
処理の間に追加で処理を挿入するには、add_filter()関数でフック処理を行います。(他にも種類はありますが、今回はadd_filterを使った方法を紹介します。)
add_filter()の概要
処理中に指定したタイミングで処理を追加挿入します。
add_filter()の使い方
add_filter()関数は、以下の引数を適切に設定することで、利用することができます。
引数
- 第1引数:フックする箇所
- 第2引数:追加挿入する処理を書いた関数
- 第3引数:優先順位(省略可能で初期値は10、値が小さいほど優先)
- 第4引数:関数が受け取る引数の個数(省略可能で初期値は1)
第1引数では、フック処理を挿入したい位置を指定します。実際には以下の一覧から、処理を挿入したいタイミングを選択することになります。
一般的に最もよく利用されるのはthe_content(投稿コンテンツを画面に出力する直前)です。
第2引数では、実行したい処理を書き込んだ関数名を指定します。なお第3引数と第4引数は特に指定がない限りは省略して、第1引数と第2引数だけで処理を書く場合が多いです。
戻り値
フック処理が無事挿入できるとtrueが返ってきます。処理の挿入に失敗した場合はfalseが返ってきます。
add_filter()関数の利用例
以下のサンプルのようにadd_filter()関数を利用します。なおadd_filter()関数はWordPressのテーマ内にあるfunction.phpに記述します。
function.phpにadd_filter()関数を記述するときの利用例・サンプル
以下は、コンテンツが表示される時に、add_function関数の処理を挿入して実行するサンプルです。
function add_function($the_content) { echo 'hello world !'; } // 第3、第4引数は省略 add_filter('the_content', 'add_function');
プラグイン処理の前にadd_filter()関数を挿入する方法
プラグインの処理が実行される前に、add_filterで処理を追加する場合は、基本的には特に何も意識せずにadd_filterを利用すればOKです。
というのも、プラグインの処理もadd_filterの処理と同様に「フック」することで処理を追加しています。このフック処理の第3引数にある優先順位がプラグインはデフォルト値の10よりも優先度が低く設定されています。そのため、特に優先順位を意図的に変更していないかぎりは以下の順番で処理が実行されます。
通常の処理が実行される順番
- add_filterで追加挿入された処理が実行
- プラグインの処理が実行
プラグイン処理の後にadd_filter()関数を挿入する方法
プラグインの処理を実行した後に、add_filter関数によりフックして処理を追加挿入したい場合は、1つ工夫が必要です。
その工夫とは、第3引数である「優先順位」を低くすることです。
普段add_filterは第3引数を省略するケースが多いですが、もし省略した場合は優先順位はデフォルトの10が設定されます。この値は小さいほうが優先順位が高いため、処理が複数あった場合は小さい値を設定されたフック処理から優先して実行されていくことになります。
プラグイン処理の優先順位はデフォルトの10より優先度の低い大きい数値が設定されています。そのため、第3引数を省略したadd_filterによる処理は、優先順位が低いプラグインの処理より先に実行されることになります。
今回は「プラグイン処理が実行された後に処理を追加したい」ので、追加したい処理の優先順位をプラグイン処理よりも低く設定することで実現します。
具体的には、add_filterを利用する際に、第3引数に「12」以上を指定することでプラグイン処理の後に処理を追加挿入することができます。お気づきかと思いますが、プラグイン処理の優先順位はデフォルトの10よりも低い11が設定されているわけです。
以下は、コンテンツが表示される時に、プラグイン処理が実行された後にadd_function関数の処理を挿入して実行するサンプルです。
プラグイン処理の後に処理を追加するサンプル
function add_function($the_content) { echo 'hello world !'; } // 第3引数は12で優先順位をさげる。第4引数は省略 add_filter('the_content', 'add_function', 12);
このように、add_filterが実行される優先順位をプラグイン処理よりも低く設定することで以下の流れで処理を実行させることが可能になります。
処理が実行される順番
- プラグインの処理が実行
- add_filterで追加挿入された処理が実行
需要はそれほど多くないが重宝するテクニック
add_filterによるフック処理が実行される優先順位を変更するのは、それほど機会が多くありません。しかしながら、WordPress開発者であれば、フック処理についての理解は極めて重要です。
add_filterを複数設定したときや、プラグインと競合したときに、期待どおりの順番で動作するように、優先順位を適切に設定していきましょう。