Utilizzo di variabili globali all'interno del plugin
Sto creando il mio primo plugin e mi sono trovato a dover richiamare le stesse variabili di opzione in varie parti della stessa pagina, quindi ho cercato una soluzione e mi sono imbattuto nelle variabili globali che sembrano funzionare per me. Tuttavia, dopo aver letto alcuni articoli, le persone sembrano essere contrarie all'uso di variabili globali e inoltre non sono del tutto sicuro di usarle nel modo corretto.
Ecco cosa ho:
/************************
* Variabili
************************/
global $bClass, $cClass, $dClass, $cExpiry;
$bClass = $cClass = $dClass = $cExpiry = get_option('myoption');
Poi, dato che uso una singola opzione per salvare le variabili rilevanti in un array, visualizzo il valore in questo modo
jquery
expires: <?php global $cExpiry; echo $cExpiry['cExpiry']; ?>,
e poi lo userei anche in altre funzioni all'interno della stessa pagina.
Quindi, funziona per me, ma mi chiedo ancora se lo sto facendo nel modo giusto.
aggiornamento Grazie per la spiegazione ragazzi, ho finito per utilizzare variabili locali e ho anche trovato un errore nel mio codice;
Dato che ho tutte le mie variabili salvate in una singola opzione, ho usato solo una variabile locale:
$options = get_option('myoption');
Poi accedo all'array inserendo la variabile tra parentesi quadre
<?php echo $options['var1']; ?>
Mentre prima stavo facendo $bClass = $cClass = $dClass = $cExpiry = get_option('myoption');
che è sbagliato.

Ci sono modi più semplici di questo. Come già detto da @Wyck, l'uso dei globali è una cattiva idea, ecco una breve spiegazione e come fare:
Perché i globali sono negativi:
1) Chiunque può accedervi ovunque. All'inizio sembra bello, ma potresti anche fare quanto segue:
// Il tuo codice: valore predefinito
global $foo;
$foo = 'bar';
// Impostazione dell'utente:
global $foo;
$foo = get_option( 'baz' );
// Più avanti nel tuo codice
if ( 'bar' === $foo )
// fai qualcosa di importante
// Ora io, l'utente finale, faccio questo in un template
// o Ernie, lo sviluppatore alle prime armi, lo fa nel suo plugin di terze parti:
$GLOBALS['foo'] = 42;
e improvvisamente nulla funziona come previsto. È semplice: i globali possono essere intercettati. Non sono privi di conflitti e nessuno può mai essere sicuro di ciò che contengono.
2) Ora che sai che possono cambiare al volo, sai che sono imprevedibili. E se vuoi rintracciarli con il tuo IDE (ad es. PHPStorm, Eclipse/Aptana, ecc.) non scoprirai mai qual è la loro origine o dove esattamente vengono modificati... a meno che non ti siedi per un bel po' e usi cose come Breakpoint e strumenti come XDebug e conosci la tua strada.
3) Devo davvero scrivere altro? Credo di no.
Conclusione: Poiché la maggior parte delle opzioni viene caricata automaticamente, sono già presenti in ogni pagina/richiesta e non è necessario racchiuderle in un globale. Chiama semplicemente get_option()
ogni volta che ne hai bisogno.
Come spostare i dati da PHP a JS
È semplice: wp_localize_script()
Esempio: (può essere utilizzato anche con gli hook login_enqueue_scripts
e admin_enqueue_scripts
)
add_action( 'wp_enqueue_scripts', 'wpse115840_scripts' );
function wpse115840_scripts()
{
wp_enqueue_script( 'wpse_handle', etc... );
// Qui sta la magia:
wp_localize_script( 'wpse_handle', 'wspeObject', array(
'foo' => 'bar',
'bar' => get_option( 'baz' )
) );
}
Ora puoi accedere a tutti i dati dell'array wp_localize_script()
(il terzo argomento) nel tuo file javascript che hai appena registrato/caricato semplicemente chiamando wpseObject
. Il seguente esempio ti darebbe ora il valore bar
:
console.log( wpseObject.foo );
e il tuo wpseObject.bar
conterrebbe il valore dell'impostazione baz
.
