Utilizarea hook-ului wp init pentru a apela alte hook-uri
Vreau să știu dacă este o practică bună conform dezvoltării de teme sau plugin-uri WordPress.
add_action('init','all_my_hooks');
function all_my_hooks(){
// unele lucruri de inițializare aici și apoi
add_action('admin_init',-----);
add_action('admin_menu',----);
// mai multe de acest gen
}
mulțumesc

În general: Da, așteptați un hook dedicat pentru a începe codul propriu. Niciodată nu aruncați o instanță de obiect direct în namespace-ul global. Dar init
este rareori necesar.
Conectați-vă cât mai târziu posibil. Dacă primul cod rulează pe wp_head
, nu folosiți un hook mai devreme. Puteți chiar să cascadați hook-uri:
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// faceți ceva
// apoi
add_action( 'wp_footer', 'second_callback' );
}
Referitor la hook-ul init
: Folosiți wp_loaded
în loc. Acesta rulează după init
și după ce ms_site_check()
a fost apelat. Astfel evitați să rulați pluginul pe un sub-site invalid într-o instalare multi-site. Orice altceva rămâne la fel.

multumesc mult pentru raspuns, totusi ramane o nelamurire, care este mai bine sa incarci toate celelalte hook-uri in interiorul wp_loaded sau sa le incarci separat ? ma intreb daca adaug hook-uri in wp_loaded ele vor fi conectate mai devreme in loc sa fie conectate dupa admin_init sau admin_menu ?

Nu văd beneficiile mari ale acestei practici, din următoarele motive:
Funcțiile tale de callback nu sunt apelate la înregistrare
Funcțiile add_action
și add_filter
doar adaugă o intrare în variabila globală $wp_filter
care conține toate filtrele și acțiunile. Vezi sursa. Nu apelează funcția ta. Codul tău va rula doar când sunt apelate do_action
și apply_filters
(cu numele corespunzător al hook-ului), ceea ce se întâmplă foarte târziu în locul unde acele hook-uri ar trebui să fie.
Ai putea spune că asta va face ca variabila globală $wp_filter
să devină mai mare => mai multă memorie necesară. Dar cred că crearea unei noi funcții are aceeași problemă.
Organizarea codului
Punând totul într-o singură funcție te obligă să ții minte toate hook-urile în fiecare fișier din tema/pluginul tău. Nu ai face ceva de genul:
- în
header.php
: adaugi hook-uri și funcții de callback pentru lucruri care se întâmplă în header (cum ar fi meniul, înregistrarea scripturilor) - în
content.php
: adaugi hook-uri și funcții de callback pentru filtrarea conținutului admin-menu.php
: adaugi hook-uri și funcții de callback pentru a adăuga meniuri în admin
(presupunând că acele fișiere sunt puse în tema/pluginul tău)
În loc de asta, trebuie să:
- pui doar funcții de callback în
header.php
,content.php
,admin-menu.php
- și să pui toate hook-urile într-o funcție separată într-un alt fișier
=> Asta te va face să nu înțelegi ce se întâmplă când te uiți la conținutul fișierului header.php
. Trebuie să cauți să afli când sunt declanșate acele callback-uri.
Și gândește-te la situația când ai mai multe clase în tema/pluginul tău. Pui toate hook-urile din toate clasele într-un singur loc? Sau fiecare clasă are o funcție wrapper care conține toate hook-urile? E prea redundant!
În afara acestor motive, cred că e o chestiune de stil personal :). Văd unele framework-uri cum ar fi Hybrid care fac ce ai spus. Uneori îmi face greu să înțeleg acele framework-uri!
