J'ai un morceau de travail de javascript qui contient un objet littéral. Mais j'ai besoin de le localiser, et je cherche à réécrire pour que je puisse obtenir wp_localize_script () pour y accéder et produire le format correct.
La version non localisée (non dynamique) ressemble à ceci:
var layoyt_config = {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1':1}
, 'rs' : {'sb1':1,'sb2':1}
, 'align' : 'center'
};
Maintenant, pour avoir ces valeurs générées par php (basé sur certains wp_settings), je veux utiliser wp_localize_script, donc je peux le prendre à partir de là:
var layoyt_config = my_localized_data.layoyt_config;
Et pour obtenir ces données dans cette propriété d'objet, j'ai «pensé» que je pouvais le faire, mais évidemment pas:
$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);
Comme cela entraînera une erreur d'analyse PHP, j'ai essayé de réécrire la syntaxe json en tableau, car wp_localize_script le convertira en notation objet, mais cela ne fonctionne pas non plus pour moi:
$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);
Et bien que cela fonctionne sans problème à travers l'analyseur php, je n'obtiens pas la sortie attendue dans ma source de page, car my_localized_data.layout_config devient une chaîne "Array", voici la sortie:
<script type='text/javascript'>
/* <![CDATA[ */
var wpkit_localized_data = {
layout_config: "Array"
};
/* ]]> */
</script>
Alors .. Comment puis-je faire cela (ou dois-je simplement accepter que je dois «aplatir» mon objet en vars discrets comme:
lc_header = '1';
ls_ls_sb1 = '1';
etc...
la source
Clause de non-responsabilité - Je suis hors de ma profondeur sur les choses de sécurité JS ici.
Tout d'abord, pour correspondre à la sortie souhaitée, vous êtes désactivé par niveau d'imbrication. Le nom de l'objet va comme paramètre dans l'appel localize (au lieu de la clé du tableau):
Mais
ls
etrs
sont toujours rompus car laWP_Scripts->print_scripts_l10n()
méthode ne gère pas le cas lorsque la variable est un tableau.Le mieux que je pourrais trouver pour corriger ce filtre suivant (comme ci-dessus - je ne sais pas comment il serait sûr de l'utiliser en production, mais pour donner une idée générale):
la source