Eu tenho um pedaço de javascript que contém um objeto literal. Mas preciso localizá-lo e estou tentando descobrir como reescrevê-lo para que eu possa obter wp_localize_script () para acessá-lo e gerar o formato correto.
A versão não localizada (não dinâmica) fica assim:
var layoyt_config = {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1':1}
, 'rs' : {'sb1':1,'sb2':1}
, 'align' : 'center'
};
Agora, para ter esses valores gerados pelo php (com base em algumas wp_settings), quero usar wp_localize_script, para que eu possa levá-lo a partir daí:
var layoyt_config = my_localized_data.layoyt_config;
E para obter esses dados nessa propriedade de objeto, pensei que poderia fazer isso, mas obviamente não:
$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 isso causará erro de análise do PHP, tentei reescrever o json na sintaxe da matriz, pois o wp_localize_script o converterá novamente em notação de objeto, mas isso também não funciona para mim:
$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);
E enquanto isso ocorre sem problemas no analisador php, não recebo a saída esperada na fonte da minha página, pois my_localized_data.layout_config se torna uma String "Array", eis a saída:
<script type='text/javascript'>
/* <![CDATA[ */
var wpkit_localized_data = {
layout_config: "Array"
};
/* ]]> */
</script>
Então .. Como posso fazer isso (ou apenas tenho que aceitar que devo 'achatar' meu objeto em vars discretos como:
lc_header = '1';
ls_ls_sb1 = '1';
etc...
fonte
Exoneração de responsabilidade - Não estou a par das questões de segurança sobre JS aqui.
Primeiro, para corresponder à saída desejada, desative o nível de aninhamento. O nome do objeto passa como parâmetro na chamada de localização (em vez da chave da matriz):
Mas
ls
ers
ainda estão quebrados porque oWP_Scripts->print_scripts_l10n()
método não lida com o caso quando a variável é array.O melhor que pude resolver foi o seguinte filtro (como acima - não tenho certeza de quão seguro seria usá-lo na produção, mas para dar uma idéia geral):
fonte