ワードプレスで指定のフックに登録された関数を手軽に調べる方法
WordPressでフックを使用してカスタマイズをしていると、慣れないうちは思いがけず上手く動かない事もしばしば。使いたいアクションフックやフィルターフックに、どんな関数がどんな順序で登録されているのか調べたい事って、少なからずあるのではないでしょうか。
という事で今回は、指定のアクション/フィルターフックに追加されている関数の一覧を表示できるショートコードを作ってみました。非公開のテストページ上に記述してプレビューで確認できます。
~ 目次 ~
functions.phpにコードを追記
ショートコードを追加するコードです。コピーして、お使いのテーマのfunctions.phpの最後にでも貼り付けて下さい。
13行目のコメントアウトを消すと、さらに詳細を表示できますが、メモリ不足でエラーが出るケースがあるので、コメントアウトしてあります。
2021-08-26 上記の詳細表示によるメモリ関連のエラーで、このページが閲覧できなくなっていたのを修正しました。それに合わせてショートコードも編集してあります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/* フックされている関数のチェック */ function show_hook_func($attr){ global $wp_filter; if($wp_filter[$attr[0]]){ $hookFunc.='<h2>'.$attr[0].'に登録されている関数</h2>'; foreach($wp_filter[$attr[0]]->callbacks as $cbKey=>$cb){ $hookFunc.='<h3>priority:'.$cbKey.'</h3><ol>'; foreach($cb as $funcKey=>$func){ $hookFunc.='<li>['.$funcKey.']</li>'; } $hookFunc.='</ol>'; } //$hookFunc.='<h2>詳細</h2><pre><code>'.strip_tags(print_r($wp_filter[$attr[0]],true)).'</code></pre>'; }else{ $hookFunc.='現在このフックに登録されている関数はありません。'; } return $hookFunc; } add_shortcode('hook_func','show_hook_func'); |
テスト用ページを作成
投稿ページでも固定ページでもよいのですが、本文に下のコードだけを書いたページを公開状態を「非公開*」にして作成しておきます。何でもいいので、使いたい時に見つけやすいタイトルを付けておいて下さい。ショートコードが動いてしまうので、本来必要なカッコを書いていません。[○○]と、角カッコ?大カッコ?の中に書いてください。
※下書きでも別に問題ありませんが、(私は)うっかり公開してしまいやすいので非公開がおすすめです。
1 |
hook_func wp_footer |
とりあえずwp_footerとなっていますが、この部分を調べたいフックの名前に変更しましょう。このページをブラウザで見れば関数の一覧が表示されます。
例:the_contentを調べる場合
例を挙げておきます。the_contentにフックされている関数を表示するには、以下のショートコードを書きます。
1 |
hook_func the_content |
実際の表示
以下は、実際にショートコードの引数をwp_footerとして出力したものです。
wp_footerに登録されている関数
priority:1
- [wp_enqueue_global_styles]
- [wp_enqueue_stored_styles]
- [wp_maybe_inline_styles]
priority:10
- [the_block_template_skip_link]
- [00000000366d2d07000000005693da3dmenu_render_on_frontend]
- [back_to_index]
- [add_origin_thanks_page]
- [00000000366d277f000000005693da3dfooter]
priority:20
- [wp_print_footer_scripts]
priority:99
- [00000000366d277e000000005693da3dlateInit]
priority:1000
- [wp_admin_bar_render]
最後に
上の例の中にもありますが、関数名の部分が何だかわからない数字の羅列になってしまっている部分は、add_filterとかする時にfunctionに名前を付けていない場合(無名関数を使用している場合)のようです。
[…] add_filter,add_action http://www.webdesignleaves.com/pr/w… https://whitewood-hp.com/web-tips/a… […]