Ce face init
init rulează la fiecare cerere, după ce WordPress, pluginurile și tema s-au încărcat și utilizatorul a fost autentificat, dar înainte să se trimită antetele HTTP. Aici se înregistrează tipurile de conținut (register_post_type()), taxonomiile, shortcode-urile și tot aici se pot intercepta datele trimise prin $_POST sau $_GET.
Interogarea principală nu a rulat încă: funcții ca is_single() sau is_page() nu au răspuns la init. Pentru cod care depinde de pagina afișată, folosește template_redirect sau wp. Dacă ai nevoie de momentul în care WordPress s-a încărcat complet, documentația recomandă wp_loaded.
Pentru panoul de administrare există și admin_init, care rulează doar în zona de administrare.
Exemple
Exemplul 1: Un tip de conținut pentru meniul cafenelei
Tipurile de conținut se înregistrează la init, ca să existe la fiecare cerere.
add_action( 'init', 'dex_tip_meniu' );
function dex_tip_meniu() {
register_post_type( 'dex_meniu', array(
'label' => 'Meniu',
'public' => true,
'has_archive' => true,
'show_in_rest' => true,
'supports' => array( 'title', 'editor', 'thumbnail' ),
) );
}
Exemplul 2: Procesarea unui formular de abonare
Formularul din pagină trimite câmpul dex_email și un nonce. Verificăm nonce-ul, curățăm adresa, o salvăm și redirecționăm, ca reîncărcarea paginii să nu trimită formularul de două ori.
add_action( 'init', 'dex_proceseaza_abonare' );
function dex_proceseaza_abonare() {
if ( ! isset( $_POST['dex_email'], $_POST['dex_nonce'] ) ) {
return;
}
if ( ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['dex_nonce'] ) ), 'dex_abonare' ) ) {
return;
}
$email = sanitize_email( wp_unslash( $_POST['dex_email'] ) );
if ( is_email( $email ) ) {
$lista = get_option( 'dex_abonati', array() );
$lista[] = $email;
update_option( 'dex_abonati', array_unique( $lista ) );
}
wp_safe_redirect( home_url( '/multumim/' ) );
exit;
}
Greșeli frecvente
- Cod lent la
init: rulează la fiecare cerere (pagini, administrare, AJAX, REST, cron). Cererile HTTP externe sau interogările grele încetinesc tot site-ul. flush_rewrite_rules()la fiecareinit: regenerează regulile de URL la fiecare cerere. Apelează-l o singură dată, la activarea pluginului.is_page(),is_single()lainit: interogarea nu a rulat încă și răspunsul nu e cel așteptat. Foloseștetemplate_redirect.
Comenzi înrudite
add_action: Leagă o funcție de o acțiune WordPress, ca să ruleze automat când WordPress ajunge în acel punct.register_post_type: Înregistrează un tip de conținut personalizat (produse, evenimente, rețete), cu meniu propriu în administrare.register_taxonomy: Creează o taxonomie proprie (ca Categorii sau Etichete), de exemplu „Oraș” pentru produse sau evenimente.template_redirect: Acțiunea care rulează înainte ca WordPress să aleagă șablonul paginii; locul potrivit pentru redirecționări.wp_nonce_field: Adaugă într-un formular un câmp ascuns cu un nonce, un cod care dovedește că cererea pornește chiar de pe site-ul tău.