Modificare un file JS con i dati dalle impostazioni del plugin
Ho un plugin che, tra le altre cose, include un file javascript che richiede alcune impostazioni specifiche dell'utente. Qual è il modo migliore per ottenere queste impostazioni in javascript dai parametri delle impostazioni del plugin?
In altre parole, se rendo queste impostazioni parte della pagina delle impostazioni dove l'utente può inserirle, come potrei ottenere al meglio quei valori in javascript? Dovrei usare qualcosa per aggiungere alcuni tag script e impostarli via PHP ad ogni caricamento di pagina? Impostare un cookie sarebbe un modo migliore per farlo?

meglio è, usi le funzioni di WP per questo, un esempio per il multilinguaggio:
add_action( 'admin_enqueue_scripts', 'add_scripts' );
function add_scripts($where) {
wp_localize_script( 'post2media', 'post2media_strings', $this->localize_vars() );
}
function localize_vars() {
$strings = array(
'btntext' => __( 'Collega con il post', INPSYDE_P2M_TEXTDOMAIN ),
'txtallnone' => __( 'Includi nella galleria:', INPSYDE_P2M_TEXTDOMAIN ),
'txtall' => __( 'Tutti', INPSYDE_P2M_TEXTDOMAIN ),
'txtnone' => __( 'Nessuno', INPSYDE_P2M_TEXTDOMAIN ),
'ttlcb' => __( 'Includi immagine in questa galleria', INPSYDE_P2M_TEXTDOMAIN )
);
return $strings;
}
usa questo nel file js:
jQuery(function ($) {
buttonaddfunc = function() {
btntext = post2media_strings.btntext;
reg = /\d+/;
$( '.savesend > .button' ) . each( function() {
inputname = $( this ) . attr( 'name' );
number = reg . exec( inputname );
$( this ) . after( '<input type="submit" value="' + btntext + '" name="link[' + number + ']" class="button">' );
} );
$( '.describe-toggle-on' ).unbind( 'click', buttonaddfunc );
};
$( '.describe-toggle-on' ).bind( 'click', buttonaddfunc );
} );
Vedi anche il post di Otto

Non ho capito molto bene il tuo codice, ma ho trovato il link molto utile.

Questo è davvero eccellente, grazie! Mi chiedevo da molto tempo come fare questa cosa; grazie mille! Avevo intenzione di chiederlo sulla lista wp-hackers ma non l'ho mai fatto. Grazie ancora.

Puoi vedere nel mio ultimo plugin post2media (http://wordpress.org/extend/plugins/post2media/) per un esempio dal vivo del plugin; il plugin non ha molto codice sorgente e penso che sia ottimo per leggere il codice e comprendere la soluzione.

Ecco un esempio più semplice che arriva alle basi (nel tuo esempio ci sono molte cose in ballo): http://www.prelovac.com/vladimir/best-practice-for-adding-javascript-code-to-wordpress-plugin

Poiché il link non è più attivo, ecco l'articolo originale: https://web.archive.org/web/20190422164736/http://ottopress.com/2010/dont-include-wp-load-please/ e un altro molto utile: https://web.archive.org/web/20190429195119/http://ottopress.com/2010/passing-parameters-from-php-to-javascripts-in-plugins

Ci sono un paio di modi per farlo, uno dei quali ho già utilizzato in passato, l'altro no, ma l'ho usato per file di configurazione XML.
Il primo consiste nell'includere le variabili in un tag script all'interno dell'header o del footer di WP, prima del tag script in cui includi il tuo file JS, ad esempio:
<script type="text/javascript">
var test = "<?php echo "hello world"; /* il codice PHP rilevante per visualizzare i dati necessari */ ?>";
var slider_type = "<?php echo "nivo"; /* stessa cosa qui */ ?>";
</script>
<script type="text/javascript" src="<?php bloginfo("template_url"); ?>/js/your_js_here"></script>
L'altra alternativa sarebbe includere il JS all'interno di un file PHP che viene incluso dentro un tag script.
<script type="text/javascript" src="<?php bloginfo('template_url'); ?>/javascripts.php"></script>
All'interno di questo file includeresti il tuo javascript, e poiché PHP lo elaborerebbe, potresti includere chiamate PHP in modo simile a quanto sopra, semplicemente visualizzando i dati/opzioni che ti servono. Una cosa da notare è che potresti dover impostare gli header dell'output come text/javascript
.
Personalmente preferisco di gran lunga il primo metodo, ed è quello che uso quando ho impostazioni modificabili dall'utente che influiscono sui file javascript.
