do_action în WordPress

Hooks: acțiuni și filtre WordPress 1.2.0

Rulează toate funcțiile legate de o acțiune; apelat cu un nume nou, creează un hook propriu în tema sau pluginul tău.

Sintaxă
do_action( string $hook_name, mixed ...$arg ): void

Ce face do_action

do_action() este partea „care anunță”: când codul ajunge aici, WordPress rulează, în ordinea priorităților, toate funcțiile legate cu add_action() de acel nume. Toate hook-urile de acțiune ale nucleului (init, wp_head, save_post) sunt apeluri do_action().

Poți crea propriile hook-uri: un apel do_action( 'dex_comanda_plasata', $id, $total ) în pluginul tău lasă alt cod (o temă copil, alt plugin) să reacționeze fără să-ți modifice fișierele. Argumentele de după nume ajung la funcțiile legate (câte cer ele prin $accepted_args).

Funcția nu întoarce nimic. Dacă vrei ca alt cod să-ți schimbe o valoare, folosește apply_filters(). Parametrul variadic ...$arg apare oficial în semnătură din WordPress 5.3.0. Funcții utile alături: has_action() (verifică dacă ceva e legat) și did_action() (de câte ori a rulat o acțiune).

Parametri

Parametru Descriere
$hook_name Numele acțiunii. Pentru hook-urile proprii folosește un prefix unic (dex_).
...$arg Opțional. Oricâte valori suplimentare, trimise funcțiilor legate.

Ce returnează

Nimic (void).

Exemple

Exemplul 1: Un hook propriu într-un plugin de comenzi

Pluginul anunță comanda plasată cu două argumente. Alt fragment de cod se leagă cu 10, 2 și scrie în debug.log.

// În plugin, după salvarea comenzii:
do_action( 'dex_comanda_plasata', $comanda_id, $total );

// În alt plugin sau în tema copil:
add_action( 'dex_comanda_plasata', 'dex_jurnal_comanda', 10, 2 );

function dex_jurnal_comanda( $comanda_id, $total ) {
    error_log( sprintf( 'Comanda %d: %.2f lei', $comanda_id, $total ) );
}

Rezultat

[25-Oct-2026 10:15:02 UTC] Comanda 1043: 85.50 lei

Exemplul 2: Un loc în șablon unde alții pot adăuga HTML

Tema pune un hook în header.php; tema copil adaugă un anunț acolo fără să copieze fișierul.

// header.php (tema):
do_action( 'dex_inainte_de_meniu' );

// functions.php (tema copil):
add_action( 'dex_inainte_de_meniu', 'dex_anunt' );

function dex_anunt() {
    echo '<div class="dex-anunt">' . esc_html( 'Livrare gratuită în Iași peste 100 lei' ) . '</div>';
}

Ce afișează pagina

<div class="dex-anunt">Livrare gratuită în Iași peste 100 lei</div>

Greșeli frecvente

  • Nume fără prefix (do_action( 'comanda' )): alt plugin poate folosi același nume și funcțiile se amestecă. Folosește dex_comanda_plasata.
  • Aștepți o valoare înapoi: $x = do_action( ... ) nu primește nimic. Pentru valori modificabile folosește apply_filters().
  • Schimbi ordinea sau numărul argumentelor unui hook deja folosit de alții: codul legat de el primește alte valori și se strică.

Comenzi înrudite

  • add_action: Leagă o funcție de o acțiune WordPress, ca să ruleze automat când WordPress ajunge în acel punct.
  • apply_filters: Trece o valoare prin toate funcțiile legate de un filtru și întoarce rezultatul final; cu un nume nou, creează un filtru propriu.
  • 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.