与Google Maps API冲突

时间:2014-01-09 09:24:06

标签: jquery wordpress api google-maps wordpress-plugin

当用户在输入字段中输入几个字母时,我的插件正在使用Google Maps API自动建议位置。

为此,我按如下方式对Google Maps API进行了排队:

wp_register_script( 'auto_location_map_library', 'http://maps.googleapis.com/maps/api/js?key=' . get_option('auto_location_maps_key') . '&sensor=false&libraries=places', array('jquery'), '1.0', false);
wp_enqueue_script( 'auto_location_map_library' );

一切正常,我确实得到了自动建议。但是,无论何时对已包含Google地图库的主题进行测试,它都会完全崩溃。

我已尝试在我的插件中将主题库调用出列,但这不起作用,并不是一个很好的解决方案。

是否存在类似于我不知道的jQuery中使用的noConflict Google Maps调用?

感兴趣的是,引用自我提示的代码如下:

jQuery( document ).ready(function() {
    function initialize() {
        var autocompleteOptions = {
            <?php if (!(get_option('auto_location_countrycode') == '')) { ?>
                componentRestrictions: {country: '<?php echo get_option('auto_location_countrycode'); ?>'},
            <?php } ?>
        };

        if (jQuery('#search_location').length) {
            var input = document.getElementById('search_location');
            var autocomplete = new google.maps.places.Autocomplete(input, autocompleteOptions);
        }           
    }

    google.maps.event.addDomListener(window, 'load', initialize); 
}); 

1 个答案:

答案 0 :(得分:0)

我遇到了与my plugin相同的问题。

尝试以下方法:

add_action('wp_enqueue_scripts', 'randomfunction234_deregister_scripts',999);
add_action('wp_head', 'randomfunction234_deregister_scripts',999);
add_action('init', 'randomfunction234_deregister_scripts',999);
add_action('wp_footer', 'randomfunction234_deregister_scripts',999);
add_action('wp_print_scripts', 'randomfunction234_deregister_scripts',999);

function randomfunction234_deregister_scripts() {


        $map_handle = '';
        global $wp_scripts;
        if (isset($wp_scripts->registered) && is_array($wp_scripts->registered)) {
            foreach ( $wp_scripts->registered as $script) {             
                if ( $script->handle !== 'YOUR_MAPS_API_ENQUEUE_HANDLE' ){
                    if ( strpos($script->src, 'maps.google.com/maps/api/js') !== false || strpos($script->src, 'maps.googleapis.com/maps/api') !== false || strpos($script->src, 'maps.googleapis') !== false || strpos($script->src, 'maps.google') !== false) {
                        if (!isset($script->handle) || $script->handle == '') {
                            $script->handle = 'remove-this-map-call';
                        }
                        unset($script->src);
                        $map_handle = $script->handle;
                        if ($map_handle != '') {
                            $wp_scripts->remove( $map_handle );
                            $map_handle = '';
                            break;
                        }
                    }
                }
            }
        }

}

在您排队Google Maps API时,请务必将YOUR_MAPS_API_ENQUEUE_HANDLE更改为您的排队句柄名称,在您的情况下为auto_location_map_library

此脚本执行的操作尝试取消注册wp_enqueue_scriptswp_headinitwp_footerwp_print_scripts挂钩中的任何排队脚本。

警告:这不会取消注册任何其他插件或主题硬编码的脚本 - 这些将永远是我们方面的痛苦。