Làm cách nào để có được chuỗi hook / hành động chạy của WordPress?


48

Theo thứ tự add_actionmóc thực hiện?

I E

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




BIÊN TẬP:

Tôi cũng đã đăng giải pháp của mình.


Bản sao có thể có của wordpress.stackexchange.com/questions/135857/ cấp như của tôi đã được đăng vào ngày 25 tháng 2 năm 14
Babu

Những gì tôi đã thấy trong các quy tắc SE, tuổi của chủ đề duy nhất không còn được tính cho quyết định trùng lặp: #
T.Todua

Câu trả lời:


82

"Dữ liệu! Dữ liệu! Dữ liệu!" Anh sốt ruột khóc. "Tôi không thể làm gạch mà không có đất sét."

- Cuộc phiêu lưu của cây sồi đồng

Vì vậy, hãy thu thập một số dữ liệu thực từ một bản cài đặt không có plugin và chủ đề TwentyTwelve được kích hoạt chỉ với một tiện ích Văn bản duy nhất.

Đối với trang chủ, các do_actioncuộc gọi sau được thực hiện theo thứ tự sau:

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

Nếu bạn muốn kiểm tra thứ tự các hành động và số lần mỗi lần được bắn, thì bạn có thể sử dụng ví dụ:

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

hoặc phiên bản được chỉnh sửa này:

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

});

để có được danh sách sau:

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: Bạn cũng nên xem plugin Trình theo dõi truy vấn tuyệt vời của John Blackbourn. (Tôi không liên quan đến plugin này)


Thực sự rất tốt đẹp!
jdm2112

Cảm ơn bạn đã đề cập đến Monitor Monitor. Có vẻ là một plugin hữu ích trong trường hợp này.
DAH

@kraftner cảm ơn vì đã cập nhật, tôi luôn lên kế hoạch (nhưng quên nó) để liên kết trực tiếp đến chính câu chuyện như một nguồn thích hợp, rõ ràng foo tìm kiếm Sherlock Holmes của tôi không tuyệt vời vào thời điểm đó ;-)
birgire

1
Tôi thích trích dẫn và muốn xem thêm bối cảnh. Và như tôi đã có liên kết cho chính mình tại sao không chỉ cập nhật ở đây. :)
kraftner

1
Hơn 4 yo bài và vẫn hữu ích. Cảm ơn rất nhiều!
Sebastian Kaczmarek

20

Dưới đây là biểu đồ tải WordPress

Biểu đồ tải WordPress

Nguồn bởi @Rarst


9
Thêm ít nhất là nguồn , hoặc thậm chí tốt hơn: tìm một bản sao cho câu hỏi này.
fuxia

2
Thật ra tôi không biết tôi lấy nó từ đâu. Tôi đã lưu hình ảnh này trên PC của tôi. Nếu không tôi sẽ làm điều đó.
Robert hue

Nó cũng được xuất bản trên trang chủ Tom Mc Farlin: Vòng đời của trang WordPress -> tommcfarlin.com/wordpress-page-lifecycle
DAH

3

Tìm thấy giải pháp!

Cảm ơn @birgire cho câu trả lời tốt đẹp. Tôi sẽ thêm vào đó, muplugins_loadedđôi khi không bị sa thải, vì vậy tôi sẽ sử dụng plugins_loadednhư cái móc đầu tiên nhất (nhưng tại thời điểm đó, ủy quyền của người dùng chưa được thực hiện. Nếu bạn muốn kiểm tra ủy quyền của người dùng, thì đó initlà sớm nhất cho điều đó). ..

ps tồn tại các plugin tuyệt vời:

1) Trình theo dõi truy vấn - Bạn có thể thấy mọi thứ xảy ra trên tải trang, tức là thời lượng của từng chức năng được thực hiện và hơn thế nữa (xem tất cả ảnh chụp màn hình trên trang plugin):

nhập mô tả hình ảnh ở đây

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-HÀNH ĐỘNG :
a) danh sách chạy gỡ lỗi ( hành động ) trên trang web của bạn.
b) Xem thời lượng của mỗi hành động (không phải chức năng): nhập mô tả hình ảnh ở đây


1

Không có hai yêu cầu hoàn toàn giống nhau. Một cách nhanh chóng và bẩn thỉu (nhưng rất chính xác) để tìm hiểu những gì đang diễn ra là tạm thời thêm một dòng vào đầu do_actionhàm trong wp-includes/plugin.phpđó ghi nhật ký $tag, ví dụ:

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.