Znáte to. Potřebujete něco upravit a na Stack Overflow jste sice našli funkci, nebo popis řešení, ale kam ji sakra dát?
Dej to do functions.php – zní nejběžnější rada. Tak tam tu funkci dáte a nic se nestane. Jak to?
Je to proto, že soubor functions.php se načítá hned po načtení pluginů a může se stát, že to co chcete upravovat se definuje později.
Hooky před a po functions.php
- setup_theme
- include functions.php
- after_setup_theme
- init
Řekněme, že chceme v kódu functions.php pracovat s taxonomií WooCommerce, například product_cat.
Bohužel se nám nepodaří kód provést, protože register_taxonomies ve WooCommerce, se provádí až v init hooku, tedy po načtení functions.php. Takže v tu chvíli žádná product_cat není definovaná.
Řešením je vytvořit funkci, kterou dáme do functions.php a pomocí hooku, řekneme WordPressu, kdy chceme, aby funkci provedl.
Logicky se nabízí init, kde se registruje WooCommerce taxonomie. Pozor však dejte na to, že register_taxonomy má pozici 5, takže vy musíte mít pozici 6 a více, aby se vaše funkce provedla až když máte taxonomii definovanou.
To je odpověď na to, proč vám nemusí fungovat kód, který napíšete, nebo někde najdete.
Pořadí akcí, provedených při načtení stránky.
Při načtení každé stránky ve WordPressu, se hooky seřadí do pořadí v jakém budou prováděny. Na každé stránce se to může trochu lišit, ale základ je vždy stejný. Následující seznam ukazuje pořadí hooku WordPressu (protože do nich jsou ještě vklíněny hooky šablony a pluginů), načtených na homepage, definované jako statická stránka.
- mu_plugin_loaded
- muplugins_loaded
- registered_taxonomy
- registered_post_type
- plugin_loaded
- load_textdomain
- plugins_loaded
- wp_builder_before_plugin_init
- auth_cookie_malformed
- wp_roles_init
- auth_cookie_valid
- set_current_user
- wp_builder_before_initaction_scheduler_pre_init
- unload_textdomain
- update_option
- sanitize_comment_cookies
- setup_theme
- after_setup_theme
- init
- wp_default_styles
- wp_default_scripts
- widgets_init
- register_sidebar
- wp_register_sidebar_widget
- wp_sitemaps_init
- parse_term_query
- pre_get_terms
- redirection_first
- redirection_last
- wp_loaded
- parse_request
- send_headers
- parse_tax_query
- parse_query
- pre_get_posts
- posts_selection
- wp
- updated_option
- template_redirect
- admin_bar_init
- deprecated_constructor_run
- add_admin_bar_menus
- get_header
- wp_head
- wp_enqueue_scripts
- deprecated_function_run
- wp_error_added
- is_wp_error_instance
- enqueue_block_assets
- the_post
- wp_print_styles
- wp_print_scripts
- add_option
- added_option
- setted_transient
- wp_body_open
- loop_start
- metadata_lazyloader_queued_objects
- loop_end
- get_footer
- wp_footer
- wp_print_footer_scripts
- admin_bar_menu
- wp_before_admin_bar_render
- wp_after_admin_bar_render
Takže, takto vypadá sekvence načítání všech akcí při načtení WordPressu.
A aby jste měli představu, co se sekvencí udělají šablony a pluginy, na odkazu najdete sekvenci načítání, když je nainstalovaná šablona Astra, WooCommerce, Elementor a několik základních pluginů – https://musilda.cz/wp-content/wp_load_sequention_elementor.html
Doufám, že alespoň někomu tento článek pomůže pochopit, jak jsou hooky seřazeny za sebou a proč mu nefunguje úprava, kterou udělal.