apply_filters în WordPress

Trece o valoare prin toate funcțiile legate de un filtru și întoarce rezultatul final; cu un nume nou, creează un filtru propriu.

Sintaxă
apply_filters( string $hook_name, mixed $value, mixed ...$args ): mixed

Ce face apply_filters

apply_filters() ia o valoare ($value), o dă primei funcții legate cu add_filter(), rezultatul îl dă următoarei și tot așa, apoi întoarce valoarea finală. Dacă nimic nu e legat de filtru, primești înapoi valoarea neschimbată.

În tema sau pluginul tău, pune apply_filters() în jurul valorilor pe care alții ar trebui să le poată ajusta: texte, prețuri, liste de opțiuni. Argumentele de după $value sunt context pentru funcțiile legate (de exemplu ID-ul produsului) și nu sunt modificate.

Parametrul variadic ...$args apare oficial în semnătură din WordPress 6.0.0; argumentele suplimentare funcționau și înainte.

Parametri

Parametru Descriere
$hook_name Numele filtrului. Pentru filtrele proprii folosește un prefix unic (dex_).
$value Valoarea de filtrat (text, număr, tablou, obiect).
...$args Opțional. Valori suplimentare trimise funcțiilor legate, doar ca informație.

Ce returnează

Valoarea după ce a trecut prin toate funcțiile legate (sau $value, dacă nu există niciuna).

Exemple

Exemplul 1: Un mesaj pe care tema copil îl poate schimba

Pluginul afișează un mesaj trecut printr-un filtru propriu, cu utilizatorul curent ca argument suplimentar. Tema copil îl personalizează.

// În plugin:
$mesaj = apply_filters( 'dex_mesaj_bun_venit', 'Bine ai venit!', wp_get_current_user() );
echo '<p>' . esc_html( $mesaj ) . '</p>';

// În tema copil:
add_filter( 'dex_mesaj_bun_venit', 'dex_mesaj_personal', 10, 2 );

function dex_mesaj_personal( $mesaj, $user ) {
    if ( $user->exists() ) {
        return 'Bună, ' . $user->display_name . '! Bine ai venit la Cafenea Iași.';
    }
    return $mesaj;
}

Ce afișează pagina

<p>Bună, Ana! Bine ai venit la Cafenea Iași.</p>

Exemplul 2: Preț ajustabil, cu ID-ul produsului drept context

Funcția legată primește prețul și ID-ul și aplică o reducere de 10% doar produsului 15.

add_filter( 'dex_pret_produs', 'dex_reducere_cafea', 10, 2 );

function dex_reducere_cafea( $pret, $produs_id ) {
    return 15 === $produs_id ? $pret * 0.9 : $pret;
}

$pret = apply_filters( 'dex_pret_produs', 12.50, 15 );
echo esc_html( number_format( $pret, 2, ',', '.' ) . ' lei' );

Ce afișează pagina

11,25 lei

Greșeli frecvente

  • Nu păstrezi rezultatul: apply_filters( 'dex_x', $valoare ); fără $valoare = ... aruncă valoarea filtrată.
  • Funcții legate fără return: următoarea funcție și codul tău primesc null.
  • Confuzia cu do_action(): filtrele sunt pentru valori care se întorc, acțiunile pentru lucruri care se întâmplă (afișare, salvare, e-mail).

Comenzi înrudite

  • add_filter: Leagă o funcție de un filtru: WordPress îi dă o valoare, iar funcția întoarce valoarea modificată.
  • 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.
  • the_content: Filtrul prin care trece conținutul unui articol după ce este citit din baza de date și înainte de a fi afișat.