Explicație pentru funcția apply_filters și variabilele sale
Învăț cum să construiesc formulare HTML folosind PHP luând ca exemplu plugin-ul "simplr form registration".
Mă uit la acest cod:
$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));
Poți să îmi explici ce se întâmplă aici - ce face funcția, de ce este nevoie de 'simplr-reg-instructions' și 'simplr-reg'?
De ce nu poate fi această linie pur și simplu:
$form .= 'Please fill out this form to sign up for this site' ;
Am citit documentația funcției dar tot nu înțeleg.

Această linie utilizează două funcții diferite care necesită explicații separate.
__()
Aceasta este o funcție de traducere. Dacă setările sunt configurate corect, va traduce primul parametru dintr-o listă de șiruri pre-traduse. Dacă o instalare are un fișier cu o traducere compilată pentru această funcție, o va utiliza. Desigur, plugin-ul trebuie să includă propria traducere, de unde și al doilea parametru. simplr-reg
îi spune funcției __()
că traducerea șirului 'Please fill out this form to sign up for this site'
ar trebui să fie în fișierul de traducere asociat cu 'simplr-reg'
(acest lucru este configurat mai devreme în plugin prin funcția load_plugin_textdomain()
).
Funcția returnează apoi traducerea. Dacă nu există nicio traducere disponibilă (de exemplu, limba curentă nu are o traducere compilată, șirul nu are o traducere compilată pentru acel pachet, etc.), este returnată valoarea originală.
Deci, pentru un site WordPress în engleză, __( 'This', 'simplr-reg' )
este funcțional echivalent cu 'This'
. Pentru a afla mai multe despre l10n (Localizare), consultați documentația:
http://codex.wordpress.org/I18n_for_WordPress_Developers
apply_filters()
Această funcție vă permite să filtrați valorile utilizate de plugin după cum este necesar. Acesta este unul dintre conceptele principale pe care trebuie să le înțelegeți ca dezvoltator de plugin-uri. WordPress este extins prin hook-uri, care sunt puncte de acces care vă permit să sincronizați execuția acțiunilor plugin-ului dvs. și/sau să manipulați informații/date pe care WordPress le folosește.
Pentru a manipula date precum fragmentul de cod despre care ați întrebat, ați folosi funcția add_filter()
. Iată un exemplu de bază despre cum funcționează:
add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );
Probabil recunoașteți primul argument. Este același folosit în add_filter
mai sus. Acesta este numele hook-ului. Al doilea argument este callback-ul filtrului. Trebuie să fie un callback valid către o funcție (citiți mai multe despre callback-uri aici). Acea linie de cod spune: "Când hook-ul 'simplr-reg-instructions'
este executat, rulează funcția cu callback-ul pe care l-am furnizat." apply_filters()
execută hook-ul specificat în primul său argument, adică "execută toate funcțiile înregistrate pentru acest hook." apply_filters
apoi trimite toate celelalte argumente (în acest caz, 'Please fill out this form to sign up for this site'
) către funcțiile din acel filtru. Deci, callback-ul pe care l-am folosit mai sus ar trebui să arate astfel:
function wpse16573_my_filter( $text ){
$text = "<strong>$text</strong>";
return $text;
}
Există două tipuri de hook-uri în WordPress: filtre (tipul pe care îl folosim aici) și acțiuni. Principala diferență între ele este că filtrele așteaptă să returnați ceva, în timp ce acțiunile nu. Deci, pentru acest filtru, exemplul meu de mai sus adaugă niște html în jurul textului 'Please fill out this form to sign up for this site'
și îl returnează.
Citiți mai multe despre acțiuni și hook-uri aici:

John, mulțumesc mult. Răspuns excelent! Dar nu reușesc să găsesc nici măcar o linie "add_filter( 'simplr-reg-instructions',..." în fișierele pluginului. Cum poate să ruleze atunci apply_filter?

Dacă nu există filtre adăugate la un hook, acesta pur și simplu returnează valoarea originală. Filtru nu este acolo pentru a fi folosit de plugin, ci este acolo pentru tine, dacă ai nevoie/si-l dorești, astfel încât să nu fie nevoie să modifici pluginul în sine.

+1 Explicație Excelentă - Se Citește Exact Cum Ar Trebui Să Fie în Documentație ;-)

Aici aveți două funcții diferite: apply_filters
și __()
Funcția apply_filters
este modul WordPress de a vă permite să modificați/editați valoarea variabilelor folosind propriile funcții callback și funcția add_filter
. Acceptă mai multe argumente, dar cele importante sunt primele două:
$something = apply_filters( $tag, $value, $var ... );
$tag este numele cârligului (hook) de filtrare care este folosit în add_filter
, de exemplu:
add_filter($tag,callback_function);
$value este valoarea efectivă pe care o veți putea modifica sau edita.
$var sunt variabile pe care funcția callback le poate folosi, una sau mai multe.
Funcția __()
este folosită pentru traduceri:
__($message,$text_domain);
$message este mesajul efectiv de tradus.
$text_domain este eticheta domeniului de text folosită pentru încărcarea traducerii plugin-ului sau temei cu load_plugin_textdomain()
.
Ce face?
Caută în modulul de localizare traducerea pentru $message și o transmite instrucțiunii PHP return. Dacă nu găsește o traducere pentru $message, returnează pur și simplu $message.
Deci, cele două funcții în cazul vostru funcționează în același mod,
apply_filters
va trimite oricărei funcții callback asociate cu cârligul de filtrare simplr-reg-instructions
valoarea tradusă (dacă există) a mesajului 'Please fill out this form to sign up for this site' folosind domeniul de text simplr-reg
.

Bainternet, mulțumesc mult! Cum se face că nu găsesc nicio linie "add_filter( 'simplr-reg-instructions', " în fișierele pluginului?

Este un hook lăsat pentru dezvoltatorii care doresc să extindă sau să filtreze funcționalitatea pluginului.

Deci add_filter nu este așteptat aici? Nu înțeleg de ce. Nu ar trebui ca apply_filters să execute toate funcțiile asociate cu hook-ul său prin funcțiile add_filter?
