WordPress’in hooks(kanca) ve actions(eylem) çalışma sırasını bilmek bazen sorunları çözmekte işe yarar, örneğin çalışma sırasına göre normal, temadan veya eklentiden kaynaklı bir eylemi bir sonraki sırada çalışan eyleme eklenecek fonksiyon ile değiştirmek.
Sıralamayı öğrenmek için aslında en doğru yol Query Monitor isimli eklenti çünkü varsayılan yerleşik WordPress hooks/actions kullanılan tema ve eklentilere göre değişebilir.
Eğer standart tema ve eklentiler ile değiştirilmemiş ise, varsayılan temada WordPress 5.7 içerisinde hooks/actions çalışma sırası aşağıdaki gibidir. Son versiyon WordPress 5.8’de kontrol etmedim ancak muhtemelen aynıdır.
[0] => mu_plugin_loaded
[1] => muplugins_loaded
[2] => registered_taxonomy
[3] => registered_taxonomy
[4] => registered_taxonomy
[5] => registered_taxonomy
[6] => registered_taxonomy
[7] => registered_post_type
[8] => registered_post_type
[9] => registered_post_type
[10] => registered_post_type
[11] => registered_post_type
[12] => registered_post_type
[13] => registered_post_type
[14] => registered_post_type
[15] => registered_post_type
[16] => registered_post_type
[17] => plugins_loaded
[18] => sanitize_comment_cookies
[19] => wp_roles_init
[20] => setup_theme
[21] => unload_textdomain
[22] => load_textdomain
[23] => after_setup_theme
[24] => load_textdomain
[25] => load_textdomain
[26] => auth_cookie_malformed
[27] => set_current_user
[28] => init
[29] => registered_post_type
[30] => registered_post_type
[31] => registered_post_type
[32] => registered_post_type
[33] => registered_post_type
[34] => registered_post_type
[35] => registered_post_type
[36] => registered_post_type
[37] => registered_post_type
[38] => registered_post_type
[39] => registered_taxonomy
[40] => registered_taxonomy
[41] => registered_taxonomy
[42] => registered_taxonomy
[43] => registered_taxonomy
[44] => widgets_init
[45] => register_sidebar
[46] => register_sidebar
[47] => register_sidebar
[48] => wp_register_sidebar_widget
[49] => wp_register_sidebar_widget
[50] => wp_register_sidebar_widget
[51] => wp_register_sidebar_widget
[52] => wp_register_sidebar_widget
[53] => wp_register_sidebar_widget
[54] => wp_register_sidebar_widget
[55] => wp_register_sidebar_widget
[56] => wp_register_sidebar_widget
[57] => wp_register_sidebar_widget
[58] => wp_register_sidebar_widget
[59] => wp_register_sidebar_widget
[60] => wp_register_sidebar_widget
[61] => wp_register_sidebar_widget
[62] => wp_register_sidebar_widget
[63] => wp_register_sidebar_widget
[64] => wp_default_scripts
[65] => wp_register_sidebar_widget
[66] => wp_register_sidebar_widget
[67] => wp_register_sidebar_widget
[68] => wp_register_sidebar_widget
[69] => wp_register_sidebar_widget
[70] => wp_register_sidebar_widget
[71] => wp_register_sidebar_widget
[72] => wp_register_sidebar_widget
[73] => wp_register_sidebar_widget
[74] => wp_register_sidebar_widget
[75] => wp_register_sidebar_widget
[76] => wp_register_sidebar_widget
[77] => wp_register_sidebar_widget
[78] => wp_register_sidebar_widget
[79] => wp_register_sidebar_widget
[80] => wp_register_sidebar_widget
[81] => wp_register_sidebar_widget
[82] => wp_register_sidebar_widget
[83] => wp_register_sidebar_widget
[84] => wp_register_sidebar_widget
[85] => wp_register_sidebar_widget
[86] => wp_register_sidebar_widget
[87] => wp_register_sidebar_widget
[88] => wp_register_sidebar_widget
[89] => wp_register_sidebar_widget
[90] => wp_register_sidebar_widget
[91] => wp_register_sidebar_widget
[92] => wp_register_sidebar_widget
[93] => wp_register_sidebar_widget
[94] => wp_sitemaps_init
[95] => wp_loaded
[96] => parse_request
[97] => send_headers
[98] => parse_tax_query
[99] => parse_query
[100] => pre_get_posts
[101] => posts_selection
[102] => wp
[103] => template_redirect
[104] => get_header
[105] => wp_head
[106] => wp_enqueue_scripts
[107] => wp_default_styles
[108] => enqueue_block_assets
[109] => wp_print_styles
[110] => wp_print_scripts
[111] => wp_body_open
[112] => parse_tax_query
[113] => parse_query
[114] => pre_get_posts
[115] => parse_tax_query
[116] => posts_selection
[117] => parse_tax_query
[118] => parse_query
[119] => pre_get_posts
[120] => parse_tax_query
[121] => posts_selection
[122] => parse_tax_query
[123] => parse_query
[124] => pre_get_posts
[125] => parse_tax_query
[126] => posts_selection
[127] => parse_tax_query
[128] => parse_query
[129] => pre_get_posts
[130] => parse_tax_query
[131] => posts_selection
[132] => parse_term_query
[133] => pre_get_terms
[134] => loop_start
[135] => the_post
[136] => get_template_part_content
[137] => get_template_part
[138] => parse_comment_query
[139] => pre_get_comments
[140] => parse_comment_query
[141] => pre_get_comments
[142] => comment_form_comments_closed
[143] => loop_end
[144] => get_sidebar
[145] => dynamic_sidebar_before
[146] => dynamic_sidebar
[147] => dynamic_sidebar_after
[148] => get_footer
[149] => twentytwelve_credits
[150] => wp_footer
[151] => wp_print_footer_scripts
[152] => shutdown
Yukarıdaki değeri şu kod ile alabiliyoruz, bu kod sayfanın sonuna yukarıdaki gibi yazdırır:
add_action( 'all', function ( $tag ){
static $hooks = array();
// Only do_action / do_action_ref_array hooks.
if ( did_action( $tag ) ){
$hooks[] = $tag;
}
if ( 'shutdown' === $tag ){
print_r( $hooks );
}
});
Bunun yanında add_action() ve add_filter() fonksiyonlarındaki priority kullanımını da değerlendirmeniz çoğu durumda hayatınızı kolaylaştırır, bazen işe yaramayabilir çünkü örneğin eklentiyi kodlayan kişi ilgili hook hedefleyip kendi filtresi için olabilecek en üst priority vermiş olabilir ve onun üzerine çıkmakta zorlanabilirsiniz, bu durumda en iyisi onu önce remove_filter() ile temizleyip yeniden filter atamak veya bir önce veya sonraki eylemde etkisiz hale getirmek, değiştirmek gibi şeyler denenebilir. Aşağıda 20 ile priority edilmiş bir filtreyi 30 a değiştirmek örneği vardır;
//önce ilgili_hook kaldırıyoruz
remove_filter( 'the_content', 'ilgili_hook', 20 );
//sonra ilgili_hook yeniden priority atıyoruz
add_filter( 'the_content', 'convert_smilies', 30 );
Kaynak ve daha fazlası için:
- codex.wordpress.org/Plugin_API/Action_Reference
- wordpress.stackexchange.com/questions/162862/how-to-get-wordpress-hooks-actions-run-sequence
- Writing a Plugin – description of how to write a plugin
- Plugin API – article on how to use filters and actions
- Plugin API/Filter Reference – reference list for filter hooks
- Plugin Resources – comprehensive list of plugin-related resources
- Hooks Database – documentation for all hooks in the official WordPress Code Reference.
- WordPress Hooks Database, a database of all WordPress hooks, showing which version they come from, and linking to the source code spots that use them
- Image Source by @Rarst