2012-02-29 34 views
5

Estoy intentando cargar el API de Google Maps en una clase de administración de WordPress utilizando la siguiente sintaxis:Cargando API de 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 está escapando el "&" a "& # 038". Esto hace que el servidor de Google rechace la solicitud. Cuando lo escribo directamente en la barra de direcciones del navegador con "& sensor = false" al final, carga bien.

vi un fallo de esta clase mencionada en el sistema de Trac de WordPress: http://core.trac.wordpress.org/ticket/9243 pero fue rechazada como no válido, y el administrador de responder a la solicitud mostraron alguna manera que el enfoque "& # 038" estaba bien. Definitivamente no está bien desde el punto de vista de Google.

Por supuesto, pude hacer que la función hiciera eco del código HTML como una secuencia de comandos, pero prefiero utilizar el sistema wp_enqueue_script si es posible.

¿Alguien sabe de una solución para esto?

Saludos,

raff

Respuesta

7

Tengo algo similar en nuestro código, y que está bien (aunque codificado como &#038) de trabajo. Sospecho que su problema es que está siendo codificado, ya que tiene &. Tratando de cambiarlo a:

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

Por lo que vale la pena, nuestro código (de trabajo) es:

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 en este caso se establece en hl=en)

Editar

Parece que el comportamiento ha cambiado en la última versión de WordPress: lo anterior no funciona (pero yo Lo dejo para personas en versiones heredadas). La única alternativa que puedo ver a eco de la secuencia de comandos es añadir un filtro clean_url, algo como esto:

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

bastante feo, pero quizás un poco mejor que repitiendo la secuencia de comandos, ya que todavía va a utilizar la gestión de la dependencia de WordPress .

+0

Perdón por la respuesta lenta: he estado fuera. Muchas gracias Hobo, sí, fue así de simple. Reemplazar '&' con '&' funcionó perfectamente. – raffjones

+0

Excelente, me alegra oírlo. – Hobo

+0

Llamar a la API de Google Maps, al menos para la versión 3.X y superior, funciona correctamente con & en la URL. Google está convirtiendo el código hexadecimal en un simple y antes de analizar los parámetros. Puede verificar esto llamando a Google Maps API V3 directamente con & en lugar de & para pasar parámetros o usando Firefox + Firebug y viendo su lista de scripts. –