如何将布尔值传递给wp_LOCALIZE_SCRIPT

时间:2015-05-03 作者:neilgee

将布尔值传递到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”,这是不正确的。

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,
    });
});

结束

相关推荐