Utilizarea variabilelor globale în cadrul unui plugin
Creez primul meu plugin și am constatat că trebuie să apelez aceleași variabile de opțiuni în diverse părți ale aceleiași pagini, așa că am căutat o soluție și m-am lovit de variabilele globale care par să funcționeze pentru mine. Cu toate acestea, după ce am citit câteva articole, oamenii par să fie împotriva utilizării variabilelor globale și, de asemenea, nu sunt complet sigur dacă le folosesc în mod corect.
Iată ce am:
/************************
* Variabile
************************/
global $bClass, $cClass, $dClass, $cExpiry;
$bClass = $cClass = $dClass = $cExpiry = get_option('myoption');
Apoi, deoarece folosesc o singură opțiune pentru a salva variabilele relevante într-un array, aș afișa valoarea astfel:
jquery
expires: <?php global $cExpiry; echo $cExpiry['cExpiry']; ?>,
și apoi aș folosi-o și în alte funcții din aceeași pagină.
Deci, funcționează pentru mine, dar încă mă întreb dacă o fac corect.
actualizare Mulțumesc pentru explicații, am ajuns să folosesc variabile locale și am găsit și o greșeală în codul meu;
Deoarece am toate variabilele salvate într-o singură opțiune, am folosit doar o singură variabilă locală;
$options = get_option('myoption');
Apoi aș putea accesa array-ul plasând variabila între paranteze pătrate
<?php echo $options['var1']; ?>
În timp ce înainte făceam $bClass = $cClass = $dClass = $cExpiry = get_option('myoption');
ceea ce este greșit.

Există metode mai simple decât aceasta. După cum a menționat deja @Wyck, utilizarea variabilelor globale este o idee proastă. Iată o scurtă explicație și cum să procedați:
De ce variabilele globale sunt rele:
1) Oricine le poate accesa oriunde. La prima vedere pare util, dar puteți face și următoarele:
// Codul tău: valoare implicită
global $foo;
$foo = 'bar';
// Setarea utilizatorului:
global $foo;
$foo = get_option( 'baz' );
// Mai târziu în codul tău
if ( 'bar' === $foo )
// faci ceva important
// Acum eu, utilizatorul final, fac asta într-un template
// sau Ernie, dezvoltatorul începător, face asta în al său plugin terță parte:
$GLOBALS['foo'] = 42;
și brusc nimic nu mai funcționează așa cum te-ai aștepta. Simplu: variabilele globale pot fi interceptate. Nu sunt lipsite de conflicte și nimeni nu poate fi niciodată sigur ce conțin.
2) Acum că știi că se pot schimba din mers, înțelegi că sunt imprevizibile. Dacă încerci să le urmărești în IDE-ul tău (de ex. PHPStorm, Eclipse/Aptana, etc.), nu vei reuși niciodată să afli de unde provin sau unde anume se schimbă... decât dacă stai mult timp și folosești lucruri precum Breakpoints și XDebug și știi cum să le folosești.
3) Mai trebuie să scriu altceva? Cred că nu.
Concluzie: Deoarece majoritatea opțiunilor sunt încărcate automat, ele sunt deja prezente pe fiecare pagină/cerere și nu trebuie încapsulate într-o variabilă globală. Pur și simplu apelează get_option()
ori de câte ori ai nevoie.
Cum să transmiți date din PHP în JS
Simplu: wp_localize_script()
Exemplu: (poate fi folosit și cu hook-urile login_enqueue_scripts
și admin_enqueue_scripts
)
add_action( 'wp_enqueue_scripts', 'wpse115840_scripts' );
function wpse115840_scripts()
{
wp_enqueue_script( 'wpse_handle', etc... );
// Aici vine magia:
wp_localize_script( 'wpse_handle', 'wspeObject', array(
'foo' => 'bar',
'bar' => get_option( 'baz' )
) );
}
Acum poți accesa toate datele din array-ul wp_localize_script()
(al treilea argument) în fișierul tău JavaScript pe care tocmai l-ai înregistrat/încărcat, pur și simplu apelând wpseObject
. Următorul exemplu îți va returna valoarea bar
:
console.log( wpseObject.foo );
iar wpseObject.bar
va conține valoarea setării tale baz
.
