2012-02-29 14 views
5

Sto cercando di caricare l'API di Google Maps in una classe di amministrazione di WordPress utilizzando la seguente sintassi:Caricamento API di Google Maps con 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 sta fuoriuscendo il "&" a "& # 038". In questo modo il server di Google respinge la richiesta. Quando lo digito direttamente nella barra degli indirizzi del browser con "& sensor = false" alla fine, carica bene.

ho visto un bug di questo tipo di cui il sistema di trac WordPress: http://core.trac.wordpress.org/ticket/9243 ma è stato respinto come non valido, e l'amministratore rispondere alla richiesta mostrato in qualche modo che l'approccio "& # 038" andava bene. Non è assolutamente soddisfacente dal punto di vista di Google.

Naturalmente potrei semplicemente ottenere la funzione per echo HTML come tag di script, ma preferirei utilizzare il sistema wp_enqueue_script se possibile.

Qualcuno sa di una soluzione a questo?

Cheers,

raff

risposta

7

Ho qualcosa simile nel nostro codice, e va bene (anche codificato come &#038) di lavoro. Ho il sospetto che il tuo problema sia che è codificato a doppia, poiché hai già &. Cercando cambiandolo a:

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

Per quel che vale, il nostro codice (di lavoro) è:

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 in questo caso è impostato su hl=en)

Modifica

Sembra che il comportamento sia cambiato nell'ultima versione di WordPress: quanto sopra non funziona (ma io lo lascio per le persone sulle versioni legacy). L'unica alternativa che posso vedere per riecheggiando lo script è quello di aggiungere un filtro clean_url, qualcosa di simile:

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

abbastanza brutto, ma forse leggermente meglio di eco lo script, in quanto sarà ancora utilizzare la gestione delle dipendenze WordPress .

+0

Scusate per la risposta lenta - Sono stato via. Grazie mille Hobo - sì, è stato così semplice. Sostituire '&' con '&' ha funzionato perfettamente. – raffjones

+0

Eccellente, felice di sentirlo. – Hobo

+0

La chiamata all'API di Google Maps, almeno per la versione 3.X e successive, funziona correttamente con & nell'URL. Google sta convertendo il codice esadecimale in un semplice e prima di analizzare i parametri. Puoi verificarlo chiamando l'API V3 di Google Maps direttamente con lo & al posto di & per il passaggio dei parametri o utilizzando Firefox + Firebug e visualizzando l'elenco degli script. –