wordpress オリジナルテーマ作成 第5話「アクション・フィルターを超絶わかりやすく説明したい」
do_action()、、、add_filter()、、、
wordpressの扱う上で一つの壁になるような気がする。。。 というか、、、 ## わかりづらいっ!!!!😱 というわけでわかりやすい言葉で説明してくよ。
do_action()
定義という言葉を使ったほうがわかりやすいような気がする だからdefine_action_name()とかのほうがわかりやすいだろうなぁ。でも意味的にはやっぱdoか。。 これでアクション”フック”を用意する。 ここで作成したフックにadd_action()で処理をぶら下げていくイメージ、、かな?
add_action()
実際に実行する内容の関数をフックする=登録する 例 doaction(“定義するアクションフック名”、$引数で送る内容_ex$POST);//これをテーマとかプラグインの中で定義する add_action(“定義するアクションフック名”,“実際の処理”);
function 実際の処理(){
return "実際の処理を行う";//なので基本的にadd_actionはfunction.phpに書く。。はず。
}
フィルターもおんなじようなもんです。
フィルターは文字列直す的なを処理をするときだけ。DB->フィルター->ブラウザってイメージです。 これはテキストの改造用です
apply_filters()
フィルターの定義。 フィルターフックはすでにcoreで用意されていますが(=もともといくつかフックできる場所が用意されてますが)、自分で定義したい場合この関数を使用します。 https://wpdocs.osdn.jp/
add_filters()
用意されたフィルターフックに処理をぶら下げます。 フィルターをフックします。フックというよりは登録と覚えたほうがわかりやすいかもしれません! 基本的な考え方はadd_action()と同じです。
なのでactionだけ使ってfilterは使わない、みたいな形でもできるみたいです。。。 (でも使いましょう)
流れをいうと、予めadd_filters()で定義したやつが実行時にリストに登録され、 その後、Templateのapply_filters()が実行されたとき、それがリストの中に登録されているかを見に行って、 もし登録されていた場合、その登録されていたフィルターを実行して、返す、、、 みたいな流れみたいです。
今度、コードリーデイングしみてようと思います。😆
追記コードリーディングしてみた。
びっくりしたのが、do_action()&apply_filters()そしてadd_action()&add_filters()これらって結局は同じもの(filterのほう)を読んでいるんだね〜。 つまりadtionはfitlerのラッパーといっても過言でないかもしれない。(厳密に言えば違うが)
そしてやっぱり最初にadd_filters()の方をよんで各タグにnew WP_HOOKをインスタンス化してcallback function()をセット、それをwpのグローバルに変数に登録。($wp_filter)
そしてその後Template等実行時にdo_actionとかがあったらそのタグ名でそのグローバル変数$wp_filterを検索、 存在したらそのcallback functionを実行する。。。。
みたいな流れですね。。
やっぱりコードリーディングするとかなりわかるよになしますね!!😆
要は・・・
「定義」してインターフェイスを用意しておいて、 使いたかったら「add_〜」でそこにぶら下げてね、、、ってことです。
doとapplyは「定義」であり「インターフェイス」という認識にしたらわかりやすいのではないでしょうか? インターフェイスを・・・・定義する・・・・!
参考 https://www.sitepoint.com/an-introduction-to-wordpress-plugin-development/ https://wpdocs.osdn.jp/%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3_API