Ce face add_action
O acțiune este un punct din codul WordPress (sau al unei teme ori al unui plugin) în care se apelează do_action( 'nume' ). Cu add_action() îi spui lui WordPress: „când ajungi la acțiunea asta, rulează și funcția mea”. Așa adaugi cod fără să modifici fișierele nucleului.
Funcția ta nu întoarce nimic: o acțiune doar face ceva (afișează HTML, scrie în baza de date, trimite un e-mail). Dacă vrei să modifici o valoare, folosește un filtru (add_filter()).
$priority stabilește ordinea: numerele mici rulează mai devreme, iar funcțiile cu aceeași prioritate rulează în ordinea în care au fost adăugate. $accepted_args spune câte argumente primește funcția ta; numărul corect îl afli din apelul do_action() corespunzător (de exemplu, save_post trimite trei valori).
Parametri
| Parametru | Descriere |
|---|---|
$hook_name |
Numele acțiunii, de exemplu 'init', 'wp_footer', 'save_post'. |
$callback |
Funcția care rulează: numele ei ca text ('dex_subsol'), o metodă de clasă (array( $this, 'metoda' )) sau o funcție anonimă. |
$priority |
Opțional, implicit 10. Ordinea de rulare: valorile mai mici rulează primele. |
$accepted_args |
Opțional, implicit 1. Câte argumente primește funcția din cele trimise de do_action(). |
Ce returnează
Întotdeauna true. Funcția nu verifică dacă $callback există; o greșeală de nume apare abia când rulează acțiunea.
Exemple
Exemplul 1: Un mesaj în subsolul site-ului
Acțiunea wp_footer rulează înainte de </body> în temele care apelează wp_footer(). Textul trece prin esc_html() înainte de afișare.
add_action( 'wp_footer', 'dex_mesaj_subsol' );
function dex_mesaj_subsol() {
$text = 'Cafenea Iași – deschis zilnic, 08:00–22:00';
echo '<p class="dex-subsol">' . esc_html( $text ) . '</p>';
}
Ce afișează pagina
<p class="dex-subsol">Cafenea Iași – deschis zilnic, 08:00–22:00</p>
Exemplul 2: Mai multe argumente: save_post cu 3 valori
save_post trimite ID-ul, obiectul articolului și dacă e o actualizare. Fără 10, 3, funcția ar primi doar primul argument. Cu WP_DEBUG_LOG activ, error_log() scrie în wp-content/debug.log.
add_action( 'save_post', 'dex_jurnal_salvare', 10, 3 );
function dex_jurnal_salvare( $post_id, $post, $update ) {
if ( wp_is_post_revision( $post_id ) ) {
return;
}
$stare = $update ? 'actualizat' : 'creat';
error_log( "Articolul {$post_id} ({$post->post_title}) a fost {$stare}." );
}
Rezultat
[25-Oct-2026 09:14:02 UTC] Articolul 42 (Meniul de toamnă) a fost actualizat.
Exemplul 3: Metodă dintr-o clasă și prioritate
Într-o clasă, callback-ul este array( $this, 'metoda' ). Prioritatea 5 face ca metoda să ruleze înaintea funcțiilor legate cu prioritatea implicită 10.
class Dex_Rezervari {
public function __construct() {
add_action( 'init', array( $this, 'inregistreaza_tipuri' ), 5 );
}
public function inregistreaza_tipuri() {
register_post_type( 'dex_rezervare', array(
'label' => 'Rezervări',
'public' => false,
'show_ui' => true,
) );
}
}
new Dex_Rezervari();
Greșeli frecvente
- Paranteze după numele funcției:
add_action( 'init', dex_setup() )rulează funcția imediat și trimite rezultatul ei. Scrie doar numele, ca text:'dex_setup'. $accepted_argsuitat: funcția cere 3 parametri, dar primește unul, iar PHP oprește execuția cuArgumentCountError(Too few arguments).- Acțiune adăugată prea târziu: dacă legi o funcție de
initdintr-un fișier de șablon,inita rulat deja și funcția nu mai este apelată niciodată. - Funcțiile anonime nu pot fi scoase ulterior cu
remove_action(), pentru că nu ai cum să le dai din nou ca argument. Într-o temă sau un plugin pe care îl folosesc alții, preferă funcții cu nume.
Comenzi înrudite
add_filter: Leagă o funcție de un filtru: WordPress îi dă o valoare, iar funcția întoarce valoarea modificată.remove_action: Scoate o funcție legată de o acțiune sau de un filtru; callback-ul și prioritatea trebuie să fie identice cu cele de la adăugare.do_action: Rulează toate funcțiile legate de o acțiune; apelat cu un nume nou, creează un hook propriu în tema sau pluginul tău.init: Acțiunea care rulează după ce WordPress s-a încărcat, înainte de trimiterea antetelor; locul pentru tipuri de conținut, taxonomii și formulare.save_post: Acțiunea care rulează după ce un articol, o pagină sau alt tip de conținut a fost salvat; o folosești pentru câmpuri personalizate.