2014-01-09 109 views
0

我的插件使用Google Maps API在用戶在輸入字段中鍵入幾個字母時自動建議位置。衝突的Google地圖API

要做到這一點,我在排隊谷歌地圖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); 
}); 
+0

看看你在運行谷歌地圖時發現的螢火蟲? –

+0

@Mahmood - 在Chrome控制檯中,我收到「警告:您已在此頁面上多次包含Google Maps API,這可能會導致意外錯誤。」 –

+0

刪除後面的'google API'並嘗試。 –

回答

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

} 

確保您更改YOUR_MAPS_API_ENQUEUE_HANDLE到您的排隊手柄的名字,當你排隊的谷歌地圖API,而你的情況是auto_location_map_library

這是什麼腳本它嘗試在wp_enqueue_scriptswp_headinitwp_footerwp_print_scripts掛鉤註銷任何排隊的腳本。

警告:這不會註銷任何已被其他插件或主題硬編碼的腳本 - 這些將永遠是我們雙方的痛苦。