Загрузка API Карт Google с помощью wp_enqueue_script - PullRequest
6 голосов
/ 29 февраля 2012

Я пытаюсь загрузить Google Maps API в классе администратора WordPress, используя следующий синтаксис:

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 экранирует "&"к" & ".Это фактически заставляет сервер Google отклонять запрос.Когда я набираю его прямо в адресной строке браузера с «& sensor = false» в конце, он загружается нормально.

Я увидел ошибку такого рода, упомянутую в системе WordPress trac: http://core.trac.wordpress.org/ticket/9243, ноон был отклонен как недействительный, и администратор, отвечающий на запрос, показал, что подход «&» был в порядке.Это определенно не хорошо с точки зрения Google.

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

Кто-нибудь знает решение этой проблемы?1015 *

Ура,

Рафф

1 Ответ

7 голосов
/ 29 февраля 2012

У меня что-то похожее в нашем коде, и оно работает нормально (даже закодировано как &#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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...