问题描述
我有一个包含对象文字的 javascript 的工作。但是我需要本地化它,我想知道如何重写它,以便我可以得到 wp_localize_script(),并输出正确的格式。
non-localized(非动态) 版本如下所示:
var layoyt_config = {
'header' : 1
, 'footer' : 1
, 'ls' : {'sb1':1}
, 'rs' : {'sb1':1,'sb2':1}
, 'align' : 'center'
};
现在,要让这些值由 php(基于一些 wp_settings) 生成,我想使用 wp_localize_script,所以我可以从它那里获取:
var layoyt_config = my_localized_data.layoyt_config;
并且要获得该数据的对象属性我’thought’ 我可以做到这一点,但显然不是:
$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);
因为这将导致 PHP 解析错误我尝试重写 json 到数组语法,因为 wp_localize_script 将转换回到对象符号,但这也不适用于我:
$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);
而当这个运行顺利的时候,php 解析器,我没有得到我的页面源的预期输出,因为 my_localized_data.layout_config 成为一个字符串”Array”,这里是输出:
<script type='text/javascript'>
/* <![CDATA[ */
var wpkit_localized_data = {
layout_config: "Array"
};
/* ]]> */
</script>
所以.. 我该怎么做 (或者我只需要接受,我必须’flatten’ 我的对象成离散的变量,如:
lc_header = '1';
ls_ls_sb1 = '1';
etc...
最佳解决方案
实际上,wp_localize_script()
很简单,它只是在值附加了引号,并转义内容,期望它们都是字符串。
然而,阵列中有 l10n_print_after
键,根本没有任何干扰。它可以用于在字符串传递后执行任意代码。您可以使用它来传递额外的数据。
$data = array(
'layout_config' => {
'ls' : {'sb1': 1}
}
);
$reshuffled_data = array(
'l10n_print_after' => 'my_localized_data = ' . json_encode( $data ) . ';'
);
wp_localize_script('my-script-handle', 'my_localized_data', $reshuffled_data);
你会得到如下代码:
var my_localized_data = {}; // What is left of your array
my_localized_data = {'layout_config': {'ls': {'sb1': 1}}}; // From l10n_print_after
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。