Probleme în înțelegerea apply_filters()
În apply_filters()
apply_filters( $tag, $value, $var ... );
Am dificultăți în înțelegerea parametrilor $value
și $var
. Am citit documentația și se pare că $value
poate fi modificat, iar $var
nu, dar nu am găsit exemple concrete pentru acest lucru. Pare să fie folosit ca o modalitate de a transmite o variabilă. În acest caz, care este diferența dintre acesta și $var
?
Încearcă să vezi funcția cu nume mai bune:
apply_filters(
$filter_name, // folosit pentru add_filter( $filter_name, 'callback' );
$value_to_change, // singura variabilă a cărei valoare poți schimba
$context_1, // context
$context_2 // mai mult context
);
Deci, când această funcție este apelată ca:
// wp-login.php linia 94
apply_filters( 'login_body_class', $classes, $action );
Poți folosi …
add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );
… și primești două variabile transmise către acea funcție. Returnezi prima, iar a doua oferă doar mai mult context:
function function_to_change_login_body_class( $classes, $action )
{
if ( 'login' === $action )
$classes[] = 'foo';
if ( 'postpass' === $action )
$classes[] = 'bar';
return $classes;
}
Variabilele suplimentare sunt acolo pentru a-ți ușura deciziile, nu pentru a le schimba și pe acelea.

Dacă înțeleg corect. Nu adaug o variabilă pentru a colecta valoarea returnată de apply_filters deoarece aceasta este aplicată automat la $value_to_change?

@r00tAcc3ss Nimic nu se întâmplă automat. Trebuie să modifici valoarea în callback-ul tău. Poți de asemenea să o returnezi neschimbată dacă dorești – în funcție de context.

Ce sunt Filtrele?
Filtrele sunt funcții prin care WordPress trece datele, în anumite puncte de execuție, chiar înainte de a lua o acțiune cu aceste date (cum ar fi adăugarea lor în baza de date sau trimiterea lor către ecranul browserului). Filtrele stau între baza de date și browser (când WordPress generează pagini), și între browser și baza de date (când WordPress adaugă postări și comentarii noi în baza de date); majoritatea intrărilor și ieșirilor în WordPress trec prin cel puțin un filtru. WordPress efectuează unele filtrare în mod implicit, iar plugin-ul tău poate adăuga propriile filtre.
Conectarea la un Filtru
Pentru a permite utilizatorilor să modifice anumite date specifice (o valoare, rezultatul unei funcții etc.), sunt furnizate cârlige de filtrare prin funcțiile apply_filters
.
Aceste cârlige includ numele (sau eticheta) filtrului și cel puțin numele funcției care va fi folosită pentru a filtra (adică a modifica într-un fel) datele.
Pentru a modifica titlul unei postări, poți folosi cârligul de filtrare the_title
, care este definit astfel:
apply_filters( 'the_title', $title, $id );
Aceasta înseamnă că filtrul are eticheta/numele the_title
, primul parametru $title
reprezintă datele care trebuie modificate (adică titlul postării), iar al doilea parametru $id
oferă informații suplimentare (în acest caz, ID-ul postării).
Pentru a afișa titlul fiecărei postări cu LITERE MARI, de exemplu, poți folosi următoarea linie:
add_filter('the_title', 'strtoupper');
Dacă ne uităm la funcția add_filter
, vedem că este definită astfel:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
Am specificat doar primul și al doilea parametru (obligatoriu), în timp ce al treilea și al patrulea parametru au valorile implicite (adică 10
și 1
).
Un Filtru Mai Complex
Dacă dorești să filtrezi doar o anumită postare, poți folosi informațiile suplimentare (în cazul acestui filtru: ID-ul). Pentru a face acest lucru, trebuie să specifici numărul de parametri (care este 2 în acest caz), iar pentru a face acest lucru din nou, trebuie să specifici parametrul de prioritate (care vine înaintea numărului de argumente).
Să presupunem că vrem să afectăm doar titlul postării cu ID-ul 42, atunci codul ar arăta astfel:
add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
if (42 === $id) return strtoupper($title);
return $title;
} // function my_strtoupper
În acest caz, trebuie să specificăm toți cei patru parametri disponibili.
Ce Parametri Am Disponibili?
Pentru a identifica numărul de parametri disponibili pentru un anumit filtru, trebuie să cauți unde este definit (în acest caz: aici).
Referințe:

+1 pentru un răspuns detaliat și o clasă impecabilă (formatare frumoasă, frate)!

Mulțumesc, este foarte detaliat, dar nu explică cu adevărat ceea ce am întrebat. De exemplu, diferența dintre variabila $value și variabila $var în filtru.
