Kategoriler
WordPress

WordPress hooks/actions çalışma sırası

WordPress hooks(kanca) ve actions(eylem) çalışma sırasını öğrenmek.

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.

Query Monitor eklentisi

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: