【问题标题】:Loading Google Maps API with wp_enqueue_script使用 wp_enqueue_script 加载 Google Maps API
【发布时间】:2012-02-29 17:53:00
【问题描述】:

我正在尝试使用以下语法加载 Google Maps API:

add_action('admin_enqueue_scripts', '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 系统。

有人知道解决办法吗?

干杯,

拉夫

【问题讨论】:

    标签: wordpress google-maps


    【解决方案1】:

    我们的代码中有类似的东西,而且工作正常(甚至编码为&#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 依赖项管理。

    【讨论】:

    • 很抱歉反应慢 - 我已经离开了。非常感谢 Hobo - 是的,就是这么简单。用& 替换& 效果很好。
    • 调用 Google Maps API,至少对于 3.X 及更高版本,与 & 一起正常工作在网址中。 Google 在解析参数之前将十六进制代码转换回简单的 &。您可以通过直接使用 & 调用 Google Maps API V3 来验证这一点。代替 & 用于参数传递或使用 Firefox + Firebug 并查看您的脚本列表。
    • 顺便说一句,我已经在 WordPress 上使用 Google Maps for Store Locator Plus 2 年多了。我强烈建议将 sensor=false 作为您的第一个参数。不这样做会导致某些主题出现问题,因为它们会破坏 URL 过滤器并在第一个“&”之后杀死所有内容。 sensor=true|false 是必需的,所以把它放在第一位,这样主题/插件冲突就会少得多。
    • 只需在最后添加 .'&sensor=false' 对我来说非常适合。
    猜你喜欢
    • 2013-03-25
    • 2019-05-09
    • 2011-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-10
    • 2013-03-19
    • 1970-01-01
    相关资源
    最近更新 更多