2012-02-29 5 views
5

Я пытаюсь загрузить API Карт Google в WordPress классе администратора, используя следующий синтаксис:Загрузка Google Maps API с 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 является Ускользающий "&" на "& # 038". Это фактически заставляет сервер Google отклонять запрос. Когда я ввожу его непосредственно в адресную строку браузера с «& sensor = false» в конце, он загружается штрафом.

я увидел ошибку такого рода упоминается в системе Trac WordPress: http://core.trac.wordpress.org/ticket/9243, но он был уволен как недействительный, и администратор в ответ на просьбу как-то показал, что «& # 038» подход был штраф. С точки зрения Google это определенно не очень хорошо.

Я мог бы, конечно, просто получить функцию, чтобы эхо HTML в качестве тега скрипта, но я предпочел бы использовать систему wp_enqueue_script, если это возможно.

Кто-нибудь знает об этом решении?

Приветствия,

Raff

ответ

7

У меня есть что-то подобное в нашем коде, и это работает отлично (даже зашифрованную &#038). Я подозреваю, что ваша проблема в том, что он дважды закодирован, так как у вас уже есть &. Попытка изменить его на:

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

Для чего это стоит, наш (рабочий) код:

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 в этом случае устанавливается в hl=en)

Редактировать

Похоже, что поведение изменилось в последней версии WordPress - выше не работает (но я Я оставляю его для людей в устаревших версиях). Единственной альтернативой я могу видеть, чтобы вторя скрипт должен добавить clean_url фильтр, что-то вроде этого:

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

Довольно некрасиво, но, возможно, немного лучше, чем повторяющий сценарий, как это будет по-прежнему использовать управление в зависимость WordPress ,

+0

Извините за медленный отклик - меня не было. Большое спасибо Хобо - да, это было так просто. Замена '&' '' '' 'отлично работала. – raffjones

+0

Отлично - приятно это слышать. – Hobo

+0

Вызов API Карт Google, по крайней мере для версии 3.X и выше, корректно работает с & в URL-адресе. Google преобразует шестнадцатеричный код обратно в простой и перед разбором параметров. Вы можете проверить это, вызвав API Карт Google V3 напрямую с помощью & вместо передачи & для передачи параметров или с помощью Firefox + Firebug и просмотра списка скриптов. –

Смежные вопросы