wp_localize_script()仅适用于localhost

时间:2014-08-25 01:40:10

标签: javascript php jquery wordpress wordpress-plugin

我正在尝试使用我的wordpress插件中的leafletjs。这是我注册脚本的代码。

add_action( 'wp_enqueue_scripts', 'ea_map_load_scripts' );
function ea_map_load_scripts(){
    wp_register_script( 'ea_map_leaflet_js', plugins_url('js/leaflet.js', __FILE__), array('jquery'),false,true);
    wp_register_script( 'ea_map_js', plugins_url('js/map.js', __FILE__), array('jquery'),false,true);
    //                                                                                          ^^
    //I need to use this parameter otherwhise the leafletjs map is not charged------------------|
    wp_enqueue_script('jquery');
    wp_enqueue_script( 'ea_map_leaflet_js' );
    wp_enqueue_script( 'ea_map_js' );
    ...
}

这里通过我的主题do_action(),我调用该函数,我尝试将一些php变量传递给我的javascript插件:

add_action('wp_ea_map','wp_ea_map');
function wp_ea_map() {
    $ea_params = Array(
        'id' => get_the_ID(),
        'latitudine' => 'xx.xxx',
        'longitudine' => '-xx.xxx',
    );

    wp_localize_script( 'ea_map_js', 'marker', $map_params );
}

问题是,在我的localhost上使用相同数据库的相同代码运行良好,但未设置实时服务器标记变量。这里使用传递变量的js代码:

jQuery(document).ready(function($){
    var map = L.map('map').setView([marker.latitudine, marker.longitudine], 11);
    ....
});

是的,我确定我在两台服务器上都有相同的代码,并且没有缓存。

1 个答案:

答案 0 :(得分:0)

我认为这是一个时间问题。加载'ea_map_js'时,尚未调用'wp_ea_map'操作。

我找到了一个可以在实时服务器上运行的解决方案,在ea_map_load_scripts()中的wp_enqueue_script('ea_map_js')之后移动wp_localize_script函数。代码现在看起来像:

add_action( 'wp_enqueue_scripts', 'ea_map_load_scripts' );
function ea_map_load_scripts(){
    wp_register_script( 'ea_map_leaflet_js', plugins_url('js/leaflet.js', __FILE__), array('jquery'),false,true);
    wp_register_script( 'ea_map_js', plugins_url('js/map.js', __FILE__), array('jquery'),false,true);

    wp_enqueue_script('jquery');
    wp_enqueue_script( 'ea_map_leaflet_js' );
    wp_enqueue_script( 'ea_map_js' );

    $ea_params = Array(
        'id' => get_the_ID(),
        'latitudine' => 'xx.xxx',
       'longitudine' => '-xx.xxx',
    );

    wp_localize_script( 'ea_map_js', 'marker', $map_params );
    ...
}

我尝试了另一个解决方案,使用另一个钩子通过echo粘贴代码中的变量:

add_action('wp_head','wp_baro');
function wp_baro(){
   $post_id = get_the_ID();

   echo '<script>
        /* <![CDATA[ */
            var marker = {  
                "id" : "'.$post_id.'",
                "latitudine" : "'.xx.xxxx.'",
                "longitudine" : "'.yy.yyyy.'"};
        /* ]]> */
        </script>';
}