Tengo una pieza de trabajo de javascript que contiene un objeto literal. Pero necesito localizarlo, y estoy tratando de descubrir cómo reescribirlo para poder obtener wp_localize_script () para acceder a él, y generar el formato correcto.
La versión no localizada (no dinámica) se ve así:
var layoyt_config = {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1':1}
, 'rs' : {'sb1':1,'sb2':1}
, 'align' : 'center'
};
Ahora, para tener esos valores generados por php (basado en algunas configuraciones de wp) quiero usar wp_localize_script, para poder tomarlo desde allí:
var layoyt_config = my_localized_data.layoyt_config;
Y para obtener esos datos en esa propiedad de objeto 'pensé' que podría hacer esto, pero obviamente no:
$data = array(
'layout_config' => {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1': 1}
, 'rs' : {'sb1': 1,'sb2': 1}
, 'align' : 'center'
}
);
wp_localize_script('my-script-handle', 'my_localized_data', $data);
Como esto causará un error de análisis de PHP, he intentado reescribir la sintaxis de json a array, ya que wp_localize_script lo convertirá de nuevo en notación de objeto, pero esto tampoco funciona para mí:
$data = array(
'layout_config' => array(
'header' => 1
, 'footer' => 1
, 'ls' => array('sb1'=>1)
, 'rs' => array('sb1'=>1,'sb2'=>1)
, 'align' => 'center'
)
);
wp_localize_script('my-script-handle', 'my_localized_data', $data);
Y aunque esto se ejecuta sin problemas a través del analizador de php, no obtengo el resultado esperado en el origen de mi página, ya que my_localized_data.layout_config se convierte en una "matriz" de cadenas, aquí está el resultado:
<script type='text/javascript'>
/* <![CDATA[ */
var wpkit_localized_data = {
layout_config: "Array"
};
/* ]]> */
</script>
Entonces ... ¿Cómo puedo hacer esto (o solo tengo que aceptar que debo 'aplanar' mi objeto en variables discretas como:
lc_header = '1';
ls_ls_sb1 = '1';
etc...
fuente
Descargo de responsabilidad: estoy fuera de mi alcance en materia de seguridad de JS aquí.
Primero, para que coincida con la salida deseada, está desactivado por nivel de anidación. El nombre del objeto va como parámetro en la llamada de localización (en lugar de la clave de matriz):
Sin embargo,
ls
yrs
aún se rompen porqueWP_Scripts->print_scripts_l10n()
el método no maneja el caso cuando la variable es matriz.Lo mejor que se me ocurre es solucionar el siguiente filtro (como se indicó anteriormente; no estoy seguro de qué tan seguro sería usarlo en producción, pero para dar una idea general):
fuente