2014-01-09 4 views
0

Мой плагин использует API Карт Google для автоматического определения местоположений, когда пользователь вводит несколько букв в поле ввода.Конфликт Google Maps API

Чтобы сделать это, я епдиеее API Карт Google следующим образом:

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 Maps, она полностью разрушается.

Я пробовал деактивировать вызов библиотеки темы в моем плагине, но это не сработало и не является отличным решением.

Есть ли какой-либо вид вызова GoogleConflict, похожий на тот, который используется в jQuery, о котором я не знаю?

По сути интерес, код для ссылки на самовнушение выглядит следующим образом:

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

посмотреть, что вы нашли на firebug, когда вы запустили карту google? –

+0

@Mahmood - на консоли Chrome я получаю сообщение «Предупреждение: вы включили API Google Maps несколько раз на этой странице, что может вызвать непредвиденные ошибки». –

+0

Удалите более поздний «API Google» и попробуйте. –

ответ

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 Карт Google, который в вашем случае является auto_location_map_library.

Что этот скрипт делает это попробовать дерегистрировать любые скрипты в очереди крючков wp_enqueue_scripts, wp_head, init, wp_footer и wp_print_scripts.

Предостережение: Это не отменяет регистрацию любых скриптов, которые были жестко закодированы другими плагинами или темами - это навсегда будет болью на наших сторонах.