web-dev-qa-db-ja.com

WordPressのフック/アクションを実行するにはどうすればいいですか?

add_actionフックはどのような順番で実行されますか?

すなわち.

init
wp_head
wp_footer
after_theme_setup 
etc...
???
???
???




編集:

私も自分の解決策を掲載しました。

45
T.Todua

「データ!データ!データ!」彼はイライラして泣いた。 「粘土なしではレンガは作れない」

- 銅ブナの冒険

それでは、プラグインなしでインストールし、TwentyTwelveテーマを1つのTextウィジェットだけでアクティブにして、 実際のデータ を集めましょう。

ホームページの場合、次のdo_action呼び出しは次の順序で行われます。

muplugins_loaded
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_post_type
plugins_loaded
sanitize_comment_cookies
setup_theme
unload_textdomain
load_textdomain
after_setup_theme
load_textdomain
load_textdomain
auth_cookie_malformed
auth_cookie_valid
set_current_user
init
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
widgets_init
register_sidebar
register_sidebar
register_sidebar
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_loaded
parse_tax_query
parse_tax_query
posts_selection
template_redirect
admin_bar_init
add_admin_bar_menus
get_header
wp_head
wp_enqueue_scripts
wp_print_styles
wp_print_scripts
get_template_part_content
begin_fetch_post_thumbnail_html
end_fetch_post_thumbnail_html
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
begin_fetch_post_thumbnail_html
end_fetch_post_thumbnail_html
get_sidebar
dynamic_sidebar_before
dynamic_sidebar
dynamic_sidebar_after
get_footer
twentytwelve_credits
wp_footer
wp_print_footer_scripts
wp_before_admin_bar_render
wp_after_admin_bar_render
shutdown

アクションの順番とそれぞれのアクションの実行回数を確認したい場合は、次のようにします。

add_action( 'shutdown', function(){
    print_r( $GLOBALS['wp_actions'] ); 
});

またはこの可愛いバージョン:

add_action( 'shutdown', function(){
    foreach( $GLOBALS['wp_actions'] as $action => $count )
        printf( '%s (%d) <br/>' . PHP_EOL, $action, $count );

});

次のリストを取得します。

muplugins_loaded (1) 
registered_taxonomy (10) 
registered_post_type (10) 
plugins_loaded (1) 
sanitize_comment_cookies (1) 
setup_theme (1) 
unload_textdomain (1) 
load_textdomain (3) 
after_setup_theme (1) 
auth_cookie_malformed (1) 
auth_cookie_valid (1) 
set_current_user (1) 
init (1) 
widgets_init (1) 
register_sidebar (3) 
wp_register_sidebar_widget (12) 
wp_loaded (1) 
parse_request (1) 
send_headers (1) 
parse_tax_query (2) 
parse_query (1) 
pre_get_posts (1) 
posts_selection (1) 
wp (1) 
template_redirect (1) 
wp_default_scripts (1) 
wp_default_styles (1) 
admin_bar_init (1) 
add_admin_bar_menus (1) 
get_header (1) 
wp_head (1) 
wp_enqueue_scripts (1) 
wp_print_styles (1) 
wp_print_scripts (1) 
loop_start (1) 
the_post (10) 
get_template_part_content (10) 
begin_fetch_post_thumbnail_html (2) 
end_fetch_post_thumbnail_html (2) 
loop_end (1) 
get_sidebar (1) 
dynamic_sidebar_before (1) 
dynamic_sidebar (1) 
dynamic_sidebar_after (1) 
get_footer (1) 
twentytwelve_credits (1) 
wp_footer (1) 
wp_print_footer_scripts (1) 
admin_bar_menu (1) 
wp_before_admin_bar_render (1) 
wp_after_admin_bar_render (1) 
shutdown (1) 

PS:John Blackbournによるすばらしい Query Monitor プラグインもチェックしてください。(このプラグインには関係ありません)

80
birgire

これがWordPressのロードチャートです。

WordPress Load Chart

@Rarstによるソース

19
Robert hue

解決策が見つかりました!

いい答えをありがとう@birgire。それに加えて、muplugins_loadedは時々解雇されないので、私はplugins_loadedを一番最初のフックとして使います(ただし、現時点では、ユーザー認証はまだ行われていません。ユーザー認証を確認したい場合は、 initはそのための最も早いです)...

pS優れたプラグインがあります。

1) クエリモニタ - ページロードで発生したこと、すなわち実行された各関数の継続時間などをすべて確認できます(すべてのスクリーンショットをプラグインページで表示)。

enter image description here 

2)WP-DEBUG-BAR+WP-DEBUG-SLOW-ACTIONS
a)あなたのサイトのデバッグフック( actions )実行リスト。
b)それぞれの継続時間を参照してください アクション (機能していない): enter image description here 

2
T.Todua

基本的な手順は公式文書にもあります。

https://codex.wordpress.org/Plugin_API/Action_Reference

1
Luca Reghellin

2つの要求がまったく同じということはありません。何が起こっているのかを調べるための手っ取り早い(しかし非常に正確な)方法は、 一時的に do_actionwp-includes/plugin.php関数の先頭に、$tagを記録する行を追加することです。

if (isset($some_get_or_post_trigger_var)) file_put_contents(ABSPATH . 'action.log', "$tag\n", FILE_APPEND);
1
Walf