add_action în WordPress

Hooks: acțiuni și filtre WordPress 1.2.0

Leagă o funcție de o acțiune WordPress, ca să ruleze automat când WordPress ajunge în acel punct.

Sintaxă
add_action( string $hook_name, callable $callback, int $priority = 10, int $accepted_args = 1 ): true

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_args uitat: funcția cere 3 parametri, dar primește unul, iar PHP oprește execuția cu ArgumentCountError (Too few arguments).
  • Acțiune adăugată prea târziu: dacă legi o funcție de init dintr-un fișier de șablon, init a 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.