読者です 読者をやめる 読者になる 読者になる

WordPressの add_action、do_action、apply_filter の忘備録

do_action(”フック名”)

 →「フック名」の関数を実行する

 

add_action(”既存の関数名”、”実行する関数名”)
 →既存の関数名(フック)の関数が実行されると、”実行する関数”を追加で実行

 

apply_filters

 →add_filterを呼び出す。

  add_filterがなければ、第2引数を返す

(例1)

前提1.プラグインの中で以下の記述があるとする

return apply_filters( 'bp_get_activity_parent_content', $content );

 

↑この記述があればラッキー♪

 

前提2.function.phpの中か、PHPファイルの中に、以下の記述を書く
add_filter('bp_get_activity_parent_content', 'hoge', 10, 1);

前提3.function.phpの中に、以下の記述を書く。

function hoge ($a) {

・・・・・・

return $a;
}

 

<上記の動き>

-----------------------

(追記)

わかりやすいように簡単に書く

1.'bp_get_activity_parent_content' が発生する

2.add_filterにより、hoge()が実行される

-----------------------

 

 

1.apply_filtersで、'bp_get_activity_parent_content'というフックを作成する。以後、add_filterで、'bp_get_activity_parent_content'がないか監視する

 

2.上記の場合、add_filter('bp_get_activity_parent_content', 'hoge', 10, 1);があるので、

apply_filters( 'bp_get_activity_parent_content', $content ) の部分で、

add_filterの第2引数の 'hoge()' に $content を引き渡す。

 

3.add_filterで、hoge()が実行される。その際、hoge()に、受け取った$contentを引き渡す。

 

4.hoge()が実行され、その戻り値が、apply_filters に戻される。

 

5.よって、

return apply_filters( 'bp_get_activity_parent_content', $content );

の戻り値は、hoge()の結果となる。

返り値が存在しないか、「フックhoge」にセットされた関数がないときは、$a を返す。

 

(注意事項1)

add_filter('bp_get_activity_parent_content',・・・)を探してもないときは、

apply_filters( 'bp_get_activity_parent_content', $content )

の第2引数である、 $content が、

return apply_filters( 'bp_get_activity_parent_content', $content );

の戻り値となる。

 

(注意事項2)

<add_filter()を書く位置について>

テーマ中のfunction.phpの中に書くと、

前提1の

return apply_filters( 'bp_get_activity_parent_content', $content );

が実行されるすべての箇所に影響を及ぼす。

 

影響を限定したい場合は、

テンプレートファイル中の影響を及ぼしたい箇所に、

<?php add_filter('bp_get_activity_parent_content', 'hoge', 10, 1);?>
  <?php bp_activity_parent_content(); ?> 
<?php remove_filter('bp_get_activity_parent_content');
?>

のように、add_filterとremove_filterとで囲むように書く。

 

参考にしたページ

Wpプラグインのフックを実行(do action) - wiki - PCスキルの小技・忘却防止メモ

WordPressカスタマイズの幅が劇的に広がる、フィルターフックとアクションフックの使い方 | 株式会社LIG

 

 

9ensan.com