删除多余的Google地图脚本

时间:2016-02-26 作者:Ignat B.

我正在开发一个使用谷歌地图API的插件。插件以这种方式排队脚本:

wp_enqueue_script(\'google-maps\', \'http://maps.google.com/maps/api/js?sensor=false&callback=initialize&language=en-us\', array(\'jquery\'), false, true);

考虑到其他插件/主题可能使用相同的地图库$handle 可能不同,验证wp_script_is($handle,\'registered\') 没有意义。复制排队脚本导致JS错误:You have included the Google Maps API multiple times on this page. This may cause unexpected errors.

关于所描述的内容,我构建了一个搜索思想的代码$wp_scripts 对于Google Maps脚本并取消设置,如果发现:

global $wp_scripts;
foreach ($wp_scripts->registered as $key => $script) {
    if (preg_match(\'#maps\\.google(?:\\w+)?\\.com/maps/api/js#\', $script->src)) {
        unset($wp_scripts->registered[$key]);
    }
}
问题是:如何检查和重新分配已删除脚本的依赖关系(如果它们是由其他插件/主题设置的)。将会发生什么以及如何处理多个插件可能使用同一个插件的事实&callback=initialize Google Maps API脚本的参数。

3 个回复
最合适的回答,由SO网友:Khaled Sadek 整理而成

EDIT : 使用wp_enqueue_script 根据需要(根据需要在jQuery之后的页眉或页脚中排队)将文件排队,如:gmap.js 包含在插件中

wp_enqueue_script(\'custom-gmap\', plugin_dir_url( __FILE__ ).\'inc/js/gmap.js\', array(\'jquery\'), false, true);//just change your path and name of file
将其写入Js文件:)

$(document).ready(function() {
    if (typeof google === \'object\' && typeof google.maps === \'object\') {
        return;
    }else{
        $.getScript( \'http://maps.google.com/maps/api/js\', function() {});
    }
});

http://codepen.io/khaled-sadek/pen/WwvOGb

SO网友:Mark Kaplun

不要为此紧张。插件和主题可以通过多种方式相互破坏,当所有事情都发生在相同的执行空间/上下文中时,您无法避免这种情况。

你应该测试你想要的插件和主题,以确保你的代码能够正常工作,但是没有办法让每个人在每个时间点都满意。事实上,决定让你的队伍优先于其他人是你的一种傲慢。。。。

SO网友:majick

如果一个脚本已经排队,你可以结合你的答案来检查谷歌地图脚本,并将回退添加到@Kiki建议的javascript检查中,而不是删除它。。。

add_action(\'wp_enqueue_scripts\',\'google_maps_script_loader\',999);

function google_maps_script_loader() {
    global $wp_scripts; $gmapsenqueued = false;
    foreach ($wp_scripts->registered as $key => $script) {
        if (preg_match(\'#maps\\.google(?:\\w+)?\\.com/maps/api/js#\', $script->src)) {
            $gmapsenqueued = true;
        }
    }

    if ($gmapsenqueued) {
        wp_enqueue_script(\'custom-gmap\', plugin_dir_url( __FILE__ ).\'inc/js/gmap.js\', array(\'jquery\'), false, true);
    } else {
        wp_enqueue_script(\'google-maps\', \'http://maps.google.com/maps/api/js?sensor=false&callback=initialize&language=en-us\', array(\'jquery\'), false, true);
    }
}