Un'opzione aggiuntiva, a seconda del tipo di parametri che devi passare. Chiamiamola (2a). Puoi anche creare script PHP che generano dinamicamente text/css
o text/javascript
piuttosto che text/html
e fornire loro i dati di cui hanno bisogno usando i parametri GET piuttosto che caricando WordPress. Naturalmente questo funziona solo se è necessario passare un numero relativamente piccolo di parametri relativamente compatti. Quindi, ad esempio, supponi di dover passare solo l'URL di un post o la directory di un file o simili, puoi fare qualcosa del genere:
In header.php:
<script type="text/javascript" src="<?php print get_stylesheet_directory_uri();
?>/fancy-js.php?foo=bar&url=<?php print urlencode(get_permalink($post->ID)); ?>"></script>
In fancy-js.php:
<?php
header("Content-type: text/javascript");
?>
foo = <?php print json_encode($_GET['foo']); ?>;
url = <?php print json_encode($_GET['url']); ?>;
eccetera.
Ma questo ti consente solo di accedere ai dati passati direttamente nei parametri GET; e funzionerà solo se il numero di cose che devi passare è relativamente piccolo e la rappresentazione di quelle cose è relativamente compatta. (Fondamentalmente una manciata di valori stringa o numerici - un nome utente, per esempio, o una directory; non un elenco di tutti i post recenti di un utente o qualcosa del genere.)
Per quanto riguarda quale di queste opzioni sia la migliore - non lo so; dipende dal caso d'uso. L'opzione (1) ha il merito di essere semplice e di consentire chiaramente l'accesso a tutti i dati WordPress di cui potresti aver bisogno, senza il colpo di prestazioni del caricamento di WordPress due volte. È quasi certamente quello che dovresti fare a meno che tu non abbia una forte ragione per non farlo (ad esempio a causa delle dimensioni del foglio di stile o dello script che devi usare).
Se la dimensione diventa abbastanza grande da causare un problema in termini di peso della tua pagina, puoi provare (2) o (2a).
Altrimenti, questa è probabilmente l'idea migliore, puoi provare a separare le parti dello script o il foglio di stile che utilizzano effettivamente i dati dinamici dalle parti che possono essere specificate staticamente. Puoi dire che hai un foglio di stile che deve passare una directory da WordPress per impostare un parametro di sfondo per l'elemento # my-fancy. Potresti mettere tutto questo nell'elemento head:
<style type="text/css">
#my-fancy-element {
background-image: url(<?php print get_stylesheet_directory_uri(); ?>images/fancy.png);
padding: 20px;
margin: 20px;
font-weight: bold;
text-transform: uppercase;
font-size: 12pt;
/* ... KB and KB of additional styles ... */
}
#another-fancy-element {
/* ... KB and KB of additional styles ... */
}
/* ... KB and KB of additional styles ... */
</style>
Ma perché dovresti farlo? C'è solo una riga qui che dipende dai dati di WordPress. Meglio dividere solo le linee che dipendono da WordPress:
<style type="text/css">
#my-fancy-element {
background-image: url(<?php print get_stylesheet_directory_uri(); ?>images/fancy.png);
}
</style>
Inserisci tutto il resto in un foglio di stile statico che carichi con un elemento di collegamento standard (style.css o altro):
#my-fancy-element {
/* background-image provided dynamically */
padding: 20px;
margin: 20px;
font-weight: bold;
text-transform: uppercase;
font-size: 12pt;
/* ... KB and KB of additional styles ... */
}
#another-fancy-element {
/* ... KB and KB of additional styles ... */
}
/* ... KB and KB of additional styles ... */
E lascia che la cascata faccia il lavoro.
Lo stesso vale per JavaScript: anziché farlo:
<script type="text/javascript">
// Here comes a huge function that uses WordPress data:
function my_huge_function () {
// Do a million things ...
jQuery('#my-fancy').append('<a href="'+<?php json_encode(get_permalink($GLOBALS['post']->ID)); ?>+'">foo</a>);
// Do a million more things ...
my_other_function(<?php print json_encode(get_userdata($GLOBALS['post']->post_author); ?>);
}
function my_other_function (user) {
// Do a million things ...
}
</script>
Metti invece qualcosa di simile nell'elemento head:
<script type="text/javascript">
var WordPressPostData = {
url: <?php print json_encode(get_permalink($GLOBALS['post']->ID)); ?>,
author: <?php print json_encode(get_userdata($GLOBALS['post']->post_author)); ?>
}
</script>
Quindi rilascia il resto in un file JavaScript statico, riscrivendo my_huge_function () e my_other_function () per utilizzare i globali WordPressPostData.url e WordPressPostData.author.
40K di CSS o 40K di JS possono quasi sempre essere suddivisi in <1K che in realtà dipende da dati dinamici, e il resto, che può essere specificato in un file esterno statico e quindi ricombinato utilizzando la cascata (per CSS) o accessibile a livello globale variabili (globuli, elementi DOM o qualsiasi altro cubby-hole che preferisci, per JS).