2012-02-29 52 views
5

Tôi đang cố gắng để tải Google Maps API trong một lớp học quản trị WordPress sử dụng cú pháp sau:Đang tải Google Maps API với 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 được thoát khỏi "&" tới "& # 038". Điều này thực sự làm cho máy chủ Google từ chối yêu cầu. Khi tôi nhập trực tiếp vào thanh địa chỉ của trình duyệt với "& sensor = false" ở cuối, nó tải tốt.

Tôi thấy lỗi thuộc loại này được đề cập trong hệ thống WordPress trac: http://core.trac.wordpress.org/ticket/9243 nhưng đã bị loại bỏ là không hợp lệ và quản trị viên trả lời yêu cầu bằng cách nào đó rằng cách tiếp cận "& # 038" vẫn ổn. Nó chắc chắn là không tốt từ quan điểm của Google.

Tôi có thể tất nhiên chỉ nhận được hàm để lặp lại HTML dưới dạng thẻ tập lệnh, nhưng tôi muốn sử dụng hệ thống wp_enqueue_script nếu có thể.

Bất kỳ ai biết giải pháp cho điều này?

Chúc mừng,

Raff

Trả lời

7

Tôi đã có một cái gì đó tương tự trong mã của chúng tôi, và nó tốt (thậm chí mã hóa như &#038) ngày làm việc. Tôi nghi ngờ vấn đề của bạn là nó đang được mã hóa kép, vì bạn đã có &. Cố gắng thay đổi nó để:

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

Đối với những gì nó có giá trị, (làm việc) mã của chúng tôi là:

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 trong trường hợp này được thiết lập để hl=en)

Sửa

Có vẻ như hành vi đã thay đổi trong phiên bản mới nhất của WordPress - những điều trên không hiệu quả (nhưng I'l Tôi để nó cho những người có phiên bản cũ). Lựa chọn duy nhất tôi có thể thấy để lặp lại kịch bản là để thêm một bộ lọc clean_url, một cái gì đó như thế này:

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

Khá xấu xí, nhưng có lẽ nhỉnh hơn so với lặp lại kịch bản, vì nó vẫn sẽ sử dụng việc quản lý phụ thuộc WordPress .

+0

Xin lỗi vì phản hồi chậm - Tôi đã vắng mặt. Cảm ơn rất nhiều Hobo - vâng, nó đơn giản như vậy. Thay thế '&' bằng '&' hoạt động hoàn hảo. – raffjones

+0

Tuyệt vời - rất vui khi được nghe. – Hobo

+0

Gọi API Google Maps, ít nhất cho phiên bản 3.X trở lên, hoạt động chính xác với & trong URL. Google đang chuyển đổi mã hex trở lại thành đơn giản và trước khi phân tích cú pháp các tham số. Bạn có thể xác minh điều này bằng cách gọi trực tiếp API V3 của Google Maps với & thay cho & để chuyển thông số hoặc bằng cách sử dụng Firefox + Firebug và xem danh sách tập lệnh của bạn. –