将布尔值传递到wp\\u localize\\u脚本中的最佳方法是什么?我可以看到,所有内容都被解释为字符串。
我有一个插件的后端用户选项表单,当返回值时,我将它们用于jQuery脚本,其中一个是布尔值,用户从下拉列表中选择true或false,使用wp\\u localize\\u脚本将这些值输出为字符串(不是布尔值)“true”或“false”,这将使脚本中的参数失败。
<?php
$options = get_option(\'ng_slicknavmenu\');
// Add PHP plugin variables to the $params[] array to pass to jQuery
$data = array (
\'ng_slicknav_menu\' => $options[\'ng_slicknav_menu\'],
\'ng_slicknav_parent_links\' => $options[\'ng_slicknav_parent_links\'], // this is a boolean true/false
\'ng_slicknav_speed\' => $options[\'ng_slicknav_speed\'] ,
);
// Pass PHP variables to jQuery script
wp_localize_script( \'slickinit\', \'phpVars\', $data );
这就是我目前在js init文件中所做的
if( phpVars.ng_slicknav_parent_links === "true" )
$links = true;
else
$links = false;
jQuery(document).ready(function($){
ng_slicknav_speedInt = parseInt(phpVars.ng_slicknav_speed, 10);
jQuery(document).ready(function($) {
$(phpVars.ng_slicknav_menu).slicknav({
allowParentLinks: $links,
duration:ng_slicknav_speedInt,
});
});
});
但是有没有更好的方法呢?
我尝试了一些解决方案Passing boolean values with wp_localize_script ...
\'ng_slicknav_parent_links\' => ($options[\'ng_slicknav_parent_links\']) ? true : false,
以及
\'ng_slicknav_parent_links\' => (bool)$options[\'ng_slicknav_parent_links\'],
但答案并不奏效。这两个值的答案都会导致两个值的字符串均为“1”,这是不正确的。
SO网友:bonger
不幸地wp_localize_script()
将传入数组中的所有标量(简单类型)强制转换为字符串(然后运行html_entity_decode()
在他们身上?!),因此,您引用的答案中提到的演员阵容@HeadMedic将字符串化为“1”/,如果是布尔值,则为字符串编号,如果是int,则为字符串编号,这将无法与需要精确值的javascript插件一起使用。
一种解决方法是将参数放入传入数组中的一个数组中,这样它们就不会被损坏,例如:
$data = array (
\'ng_slicknav\' => array(
\'menu\' => $options[\'ng_slicknav_menu\'],
\'parent_links\' => (bool) $options[\'ng_slicknav_parent_links\'],
\'speed\' => (int) $options[\'ng_slicknav_speed\'] ,
),
);
您可以在javascript中直接引用它们:
jQuery(document).ready(function($) {
$(phpVars.ng_slicknav.menu).slicknav({
allowParentLinks: phpVars.ng_slicknav.parent_links,
duration:phpVars.ng_slicknav.speed,
});
});