2012-02-29 13 views
5

Próbuję załadować API Map Google w WordPress klasy administratora używając następującej składni:Ładowanie Google Maps API z wp_enqueue_script

add_action('admin_enqueue_scripts', array(&$this, 'load_google_maps')); 

...

function load_google_maps() 
{ 
    // The actual API key is configured in an options page 
    $key = get_option('google_maps_api_key'); 
    $gmaps_url = 'http://maps.googleapis.com/maps/api/js?key=' . $key . '&sensor=false'; 
    wp_enqueue_script('google-maps', $gmaps_url, NULL, NULL); 
} 

WordPress ucieka "&" do "& # 038". To sprawia, że ​​serwer Google odrzuca prośbę. Kiedy wpisuję go bezpośrednio na pasku adresu przeglądarki z "& sensor = false" na końcu, ładuje się dobrze.

Widziałem błąd tego rodzaju wymienionego w systemie trac WordPress: http://core.trac.wordpress.org/ticket/9243 ale została odrzucona jako nieważny, a administracja reaguje na prośbę pokazał jakoś, że podejście „& # 038” było w porządku. Z punktu widzenia Google zdecydowanie nie jest dobrze.

Mógłbym oczywiście po prostu uzyskać funkcję, aby echo HTML jako znacznik skryptu, ale wolałbym raczej użyć systemu wp_enqueue_script, jeśli to możliwe.

Ktoś wie o rozwiązaniu tego problemu?

Cheers,

Raff

Odpowiedz

7

Mam coś podobnego w naszym kodzie, i to jest w porządku (nawet zakodowany jako &#038) działa. Podejrzewam, że masz problem z podwójnym kodowaniem, ponieważ masz już &. Próbując zmieniając go do:

$gmaps_url = 'http://maps.googleapis.com/maps/api/js?key=' . $key . '&sensor=false'; 

Na co warto, nasz (pracy) Kod jest:

wp_register_script('googlemaps', 'http://maps.googleapis.com/maps/api/js?' . $locale . '&key=' . GOOGLE_MAPS_V3_API_KEY . '&sensor=false', false, '3'); 
wp_enqueue_script('googlemaps'); 

($locale w tym przypadku jest ustawiony na hl=en)

Edycja

Wygląda na to, że zachowanie zostało zmienione w najnowszej wersji WordPressa - powyższe nie działa (ale ja'l Zostawiam to dla osób w starszych wersjach). Jedyną alternatywą widzę nawiązując do skryptu jest dodanie clean_url filtr, coś takiego:

add_filter('clean_url', 'so_handle_038', 99, 3); 
function so_handle_038($url, $original_url, $_context) { 
    if (strstr($url, "googleapis.com") !== false) { 
     $url = str_replace("&", "&", $url); // or $url = $original_url 
    } 

    return $url; 
} 

dość brzydki, ale być może nieznacznie lepiej niż powtarzając scenariusz, jak to będzie nadal korzystać z WordPress zarządzanie zależnościach .

+0

Przepraszamy za powolną reakcję - nie było mnie. Wielkie dzięki, Hobo - tak, to było tak proste. Zastępowanie '&' z '&' działało idealnie. – raffjones

+0

Rewelacja - cieszę się, że mogę to usłyszeć. – Hobo

+0

Wywołanie funkcji API Google Maps, przynajmniej dla wersji 3.X i nowszych, działa poprawnie z adresem URL pod adresem &. Google konwertuje kod szesnastkowy z powrotem na prostą i przed analizą parametrów. Możesz to sprawdzić, wywołując interfejs API Map Google V3 bezpośrednio z & zamiast & dla przekazywania parametrów lub używając Firefox + Firebug i przeglądając listę skryptów. –