Una opción adicional, dependiendo del tipo de parámetros que necesita pasar. Llamemos (2a). También puede crear scripts PHP que generen dinámicamente text/css
o text/javascript
no text/html
, y proporcionarles los datos que necesitan utilizando los parámetros GET en lugar de cargar WordPress. Por supuesto, esto solo funciona si necesita pasar un número relativamente pequeño de parámetros relativamente compactos. Entonces, por ejemplo, digamos que necesita pasar solo la URL de una publicación o el directorio de un archivo o similar, puede hacer algo como esto:
En 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>
En fancy-js.php:
<?php
header("Content-type: text/javascript");
?>
foo = <?php print json_encode($_GET['foo']); ?>;
url = <?php print json_encode($_GET['url']); ?>;
etc.
Pero esto solo le permite acceder a los datos directamente pasados en los parámetros GET; y solo funcionará si la cantidad de cosas que necesita pasar es relativamente pequeña, y la representación de esas cosas es relativamente compacta. (Básicamente, un puñado de cadenas o valores numéricos: un nombre de usuario, digamos o un directorio; no una lista de todas las publicaciones recientes de un usuario o algo así).
En cuanto a cuál de estas opciones es la mejor, no lo sé; eso depende de su caso de uso. La opción (1) tiene el mérito de ser simple y claramente permitirle acceder a cualquier información de WordPress que pueda necesitar, sin el impacto en el rendimiento de cargar WordPress dos veces. Es casi seguro lo que debe hacer a menos que tenga una buena razón para no hacerlo (por ejemplo, debido al tamaño de la hoja de estilo o script que necesita usar).
Si el tamaño se vuelve lo suficientemente grande como para causar un problema en términos del peso de su página, puede probar (2) o (2a).
O bien, esta es probablemente la mejor idea, puede intentar separar las partes del guión o la hoja de estilo que realmente utilizan los datos dinámicos de las partes que pueden especificarse estáticamente. Di que tienes una hoja de estilo que necesita pasar un directorio de WordPress para establecer un parámetro de fondo para el elemento # my-fancy. Podrías poner todo esto en el elemento principal:
<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>
¿Pero por qué necesitarías hacer eso? Aquí solo hay una línea que depende de los datos de WordPress. Es mejor dividir solo las líneas que dependen de WordPress:
<style type="text/css">
#my-fancy-element {
background-image: url(<?php print get_stylesheet_directory_uri(); ?>images/fancy.png);
}
</style>
Coloque todo lo demás en una hoja de estilo estática que cargue con un elemento de enlace estándar (style.css o lo que sea):
#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 ... */
Y deja que la cascada haga el trabajo.
Lo mismo ocurre con JavaScript: en lugar de hacer esto:
<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>
En su lugar, coloque algo como esto en el elemento principal:
<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>
Y luego suelte el resto en un archivo JavaScript estático, reescribiendo my_huge_function () y my_other_function () para hacer uso de los globales WordPressPostData.url y WordPressPostData.author.
40K de CSS o 40K de JS casi siempre se pueden dividir en <1K que realmente depende de datos dinámicos, y el resto, que se puede especificar en un archivo externo estático y luego recombinar usando la cascada (para CSS) o accesible globalmente variables (globales, elementos DOM o cualquier otro cubículo que prefiera, para JS).