我正在尝试使用我的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);
....
});
是的,我确定我在两台服务器上都有相同的代码,并且没有缓存。
答案 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>';
}