În loc să arătați locația afacerii dvs. pe o hartă Google, de ce să nu oferiți utilizatorilor posibilitatea de a obține indicații de conducere pe aceeași pagină? Nu este nevoie ca ei să deschidă o nouă fereastră de browser și să o găsească singuri, putem face mai bine decât asta!
Utilizarea API-ului Google Maps în cadrul site-ului dvs. WordPress este un proces relativ simplu și vom explora exact cum se face în acest tutorial.
Notă: Vom scrie un pic destul de JavaScript aici, dar nu vă faceți griji! Acesta este un tutorial WordPress, deci nu ezitați să luați peste piese JavaScript :)
În tine functions.php fișier (situat în directorul rădăcină al temei) - includeți map.php fișierul pe care l-ați creat în partea de sus.
/ * funcții.php * / include ('map / map.php');
Există 3 lucruri pe care dorim să le putem edita din zona Admin.
infoWindow
conţinut. Acesta este balonul alb pe care îl vedeți adesea pe Hărți Google - vrem să putem edita textul în bule!În map.php, cârlig în admin_init
pentru a înregistra setările noastre:
funcția map_init () register_setting ('general', 'map_config_address'); register_setting ('general', 'map_config_infobox'); register_setting ('general', 'map_config_zoom'); add_action ('admin_init', 'map_init');
Acum putem seta textul pentru secțiunea noastră în pagina de opțiuni și toate intrările de care avem nevoie.
funcția map_config_option_text () echo 'Setați opțiunile pentru hartă aici:
„; // Longitudine, Latitude Valori pentru funcția de destinație map_config_address () printf ((''), get_option (' map_config_address ')); // Continutul textului pentru functia InfoWindow Bubble map_config_infobox () printf ((''), get_option (' map_config_infobox ')); // Nivelul inițial de mărire al hărții. funcția map_config_zoom () printf ((''), get_option (' map_config_zoom '));
În cele din urmă ne-am prins admin_menu
pentru a afișa setările noastre în WordPress Admin:
funcția map_config_menu () add_settings_section ('map_config', 'Configurația hărții', 'map_config_option_text', 'general'); add_settings_field ('map_config_address', 'Adresă - Longitudine și Latitude', 'map_config_address', 'general', 'map_config'); add_settings_field ('map_config_infobox', 'Map InfoWindow', 'map_config_infobox', 'general', 'map_config'); add_settings_field ('map_config_zoom', 'Nivel de mărire a hărții', 'map_config_zoom', 'general', 'map_config'); add_action ('admin_menu', 'map_config_menu');
Intrați în zona de administrare, ar trebui să vedeți acum:
Adresa de destinație
Aplicația Google Maps API acceptă de fapt adrese regulate, cum ar fi "Newgate Lane, Mansfield, Nottinghamshire, Marea Britanie" - Cu toate acestea, veți afla că veți dori să fiți mai precis cu destinația dvs. (de exemplu, direct la afacerea dvs. și nu doar la stradă). Puteți utiliza o mostră V3 Google Maps API pentru a căuta destinația. Trageți țintă în jurul valorii de până când ați pin-indicat loc dvs. Când sunteți fericit, copiați-l Lat / Lng:
valoare în câmpul de adresă din opțiuni - de exemplu 27.52774434830308, 42.18752500000007
(doar numerele separate prin virgulă, fără paranteze sau ghilimele!)
InfoWindow Text
Asigurați-vă ceea ce doriți. Numele dvs. de afacere ar fi o idee bună :)
Nivelul de zoom
Un bun punct de plecare este 10.
Dați clic pe "Salvați modificările" și când pagina se actualizează, puteți verifica dacă informațiile au fost stocate. Ar trebui să arate așa ceva acum:
Când vom termina, vom avea 3 elemente: Hartă, Formă, si Directii - așa că în acest tutorial am decis să le împărțim în 3 coduri scurte separate. Acest lucru ne va permite să schimbăm ordinea / plasarea fiecărui element fără a fi nevoie să modificăm codul nostru PHP. De exemplu, puteți decide să aveți instrucțiunile de deasupra hărții în loc de mai jos sau de partea laterală, etc.
Cod scurt 1: wpmap_map
Aici înregistrăm și enumerăm fișierul Javascript API Google Maps, precum și propriul nostru maps.js fişier.
Apoi vom folosi $ ieșire
variabilă pentru a stoca noastre harta-container
div împreună cu unele atribute de date personalizate. ( Date-harta-infowindow
va stoca conținutul pentru infowindow și date-harta-zoom
va reprezenta nivelul de zoom inițial - ambele valori sunt returnate folosind WordPress get_option
funcţie).
În cele din urmă vom returna HTML-ul generat care va fi afișat:
funcția wpmap_map () wp_register_script ('google-maps', 'http://maps.google.com/maps/api/js?sensor=false'); wp_enqueue_script ( 'google-hărți'); wp_register_script ('wptuts-personalizat', get_template_directory_uri (). /map/map.js ',', ', true); wp_enqueue_script ( 'wptuts personalizat'); $ output = sprintf ('', get_option (' map_config_infobox '), get_option (' map_config_zoom ')); returnați outputul $; add_shortcode ('wpmap_map', 'wpmap_map');
Cod scurt 2: wpmap_directions_container
Aici întoarcem pur și simplu un gol div
cu un ID de dir-container
. Acesta va acționa ca container pentru direcții.
funcția wpmap_directions () $ output = '„; returnați outputul $; add_shortcode ('wpmap_directions_container', 'wpmap_directions');
Cod scurt 3: wpmap_directions_input
Aceasta generează marcajul necesar pentru formularul nostru.
De asemenea, vom seta opțiunea personalizată finală - adresa de destinație. De data aceasta, vom folosi un câmp de formular ascuns pentru a păstra valoarea Latitude / Longitude pe care am introdus-o mai devreme în panoul Administrator.
funcția wpmap_directions_input () $ address_to = get_option ('map_config_address'); $ output = 'Pentru Direcții de conducere, introduceți adresa dvs. de mai jos: „; returnați outputul $; add_shortcode ('wpmap_directions_input', 'wpmap_directions_input');
Acum avem setul de coduri scurte, puteți să mergeți mai departe și să le introduceți în dvs. Contacteaza-ne (sau orice pagină doriți).
Dacă previzualizați pagina acum, tot ce veți vedea sunt câmpurile de introducere a formularului. Acest lucru se datorează faptului că nu am scris JavaScript care va inițializa încă harta și div pentru direcțiile este în prezent gol.
Notă: Înainte de a ne arunca cu capul în JavaScript, trebuie doar să adăugăm acest lucru la adresa noastră style.css:
# map-container lățime: 100%; înălțime: 400px;
Acum este momentul să faceți magia să se întâmple! Voi oferi o scurtă scurgere a ceea ce vom face mai întâi, apoi vom sapa direct în cod.
WMmap
și să-i atribuiți proprietăți (dintre care unele vom lua din marcajul pe care l-am creat în codurile scurte)init
, va fi responsabil pentru încărcarea hărții și, de asemenea, pentru setarea unor valori implicite, cum ar fi textul textului Window, nivelul de mărire și poziția inițială a marcatorului (toate din opțiunile WordPress)Voi explica fiecare parte a codului pas cu pas, dar nu vă faceți griji dacă vă veți pierde, vom pune totul la capăt.
Să ne creăm obiectul și să stabilim câteva proprietăți. Aici, pur și simplu, interogăm DOM pentru a prelua elementele HTML care conțin valorile de care avem nevoie. Numele proprietăților pe care le folosim ar trebui să fie foarte clare și explicite (mapContainer este, evident, Carton Container, etc :))
Aici avem și câteva obiecte din API pe care le vom folosi mai târziu atunci când ne ocupăm de Direcții.
var WPmap = // Elemente pe care le vom folosi mai târziu! MapContainer: document.getElementById ('map-container'), dirContainer: document.getElementById ('dir-container'), inInput: document.getElementById ('map-config-address' input "), unitInput: document.getElementById ('unit-input'), // Obiecte API Google Maps dirService: new google.maps.DirectionsService (), dirRenderer: new google.maps.DirectionsRenderer * continuă mai jos * /
Acestea sunt, de asemenea, parte a noastră WPmap
obiect, dacă nu sunteți siguri cum totul se leagă împreună, asigurați-vă că verificați partea de jos a acestui tutorial pentru a vedea întregul cod împreună.
showDirections ()
Acest lucru este chemat dintr-o altă metodă pe care o vom vedea mai târziu, în principiu controlează inserarea indicațiilor în pagină.
/ * în cadrul obiectului WPmap * / showDirections: funcția (dirResult, dirStatus) if (dirStatus! = google.maps.DirectionsStatus.OK) alert ('Instrucțiunile nu au reușit:' + dirStatus); întoarcere; // Afișați instrucțiunile WPmap.dirRenderer.setMap (WPmap.map); WPmap.dirRenderer.setPanel (WPmap.dirContainer); WPmap.dirRenderer.setDirections (dirResult); ,
getStartLatLng ()
Aceasta se numește odată din partea noastră init
metodă. Acesta va seta startLatLng
proprietate egală cu a google.maps.LatLng
obiect pe care îl putem folosi ulterior. Este necesar să îi oferim valori separate pentru Latitudine și Longitudine - cum putem face acest lucru?
toInput
. Aceasta înseamnă că putem accesa valoarea folosind WPmap.toInput.value
.Despică(",")
. Aceasta va returna un tablou care conține Latitude și Longitude ca valori separate./ * în cadrul obiectului WPmap * / getStartLatLng: funcția () var n = WPmap.toInput.value.split (","); WPmap.startLatLng = nou google.maps.LatLng (n [0], n [1]); ,
getSelectedUnitSystem ()
Pentru că am permis utilizatorilor noștri să selecteze dacă preferă indicații în Metric sau Imperial, vom folosi această metodă pentru a seta DirectionsUnitSystem
la oricare dintre ele METRIC
sau IMPERIAL
.
/ * în cadrul obiectului WPmap * / getSelectedUnitSystem: function () retur WPmap.unitInput.options [WPmap.unitInput.selectedIndex] .value == 'metric'? google.maps.DirectionsUnitSystem.METRIC: google.maps.DirectionsUnitSystem.IMPERIAL; ,
a primi direcții()
Aceasta este metoda numită când utilizatorul face clic pe A primi direcții buton.
fromStr
variabil.dirRequest
. Aceasta va conține opțiunile necesare pentru a oferi Direcțiile de conducere. origine
- Adresa pe care a introdus-o utilizatorul.destinaţie
- google.maps.LatLng
obiect care conține valorile Latitude și Longitude ale destinației dvs..travelMode
- Aici asigurăm că preluăm Direcțiile de conducere.unitSystem
- Specificați ce unitate de măsură să utilizați pe baza alegerii utilizatorului.WPmap.dirService.route
- și treceți la el doi parametri: dirRequest
- acesta este obiectul care conține opțiunile noastre.WPmap.showDirections
- funcția de apel invers care gestionează plasarea direcțiilor în pagină./ * în cadrul obiectului WPmap * / getDirections: function () var dinStr = WPmap.fromInput.value; var dirRequest = origine: dinStr, destinație: WPmap.startLatLng, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: WPmap.getSelectedUnitSystem (); WPmap.dirService.route (dirRequest, WPmap.showDirections); ,
init ()
Aceasta este metoda numită când pagina este încărcată. Acesta este responsabil pentru:
init: function () // obțineți textul infowindow și nivelul de zoom var infoWindowContent = WPmap.mapContainer.getAttribute ('data-map-infowindow'); var inițialZoom = WPmap.mapContainer.getAttribute ("date-map-zoom"); // apelați metoda care stabilește WPmap.startLatLng WPmap.getStartLatLng (); // configurați harta. WPmap.map = nou google.maps.Map (WPmap.mapContainer, zoom: parseInt (initialZoom), centru: WPmap.startLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP); // configurați markerul marcatorului roșu = noul google.maps.Marker (map: WPmap.map, position: WPmap.startLatLng, draggable: false); // setați conținutul infowindow infoWindow = nou google.maps.InfoWindow (content: infoWindowContent); infoWindow.open (WPmap.map, marcator); // ascultați când sunt solicitate Direcțiile google.maps.event.addListener (WPmap.dirRenderer, 'directions_changed', function () infoWindow.close (); // închideți indexul inițial infoWindow.setVisible (false); // remove marcatorul inițial); // init; // <-- this is the end of the object.
Dacă doriți să afișați utilizatorilor dvs. după ce au solicitat indicații de orientare un mesaj frumos (precum cel descris mai jos), copiați codul de sub imagine în ascultătorul evenimentului din interiorul init
metodă.
facultativ Mulțumesc mesaj:
// Depărtați distanța călătoriei var distanceString = WPmap.dirRenderer.directions.routes [0] .legs [0] .distance.text; // setați conținutul ferestrei infoWindow înainte de al deschide din nou. infoWindow.setContent ( "Mulțumiri!
Se pare că e vorba '+ distanța + șir +' departe de noi.
Direcțiile sunt chiar sub hartă "); // redeschideți infoWindow infoWindow.open (WPmap.map, marker); setTimeout (funcția () infoWindow.close (), 8000); // închideți-l după 8 secunde.
Ești încă cu mine? Am reușit să terminăm acum și tot ce trebuie să faceți este să sunați WPmap.init ()
atunci când pagina se încarcă. Adăugați aceasta în partea de jos a paginii map.js
google.maps.event.addDomListener (fereastră, "încărcare", WPmap.init);
Am acoperit a mult de aici, să vedem cum arată atunci când totul este pus împreună.
var WPmap = // Elemente pe care le vom folosi mai târziu! MapContainer: document.getElementById ('map-container'), dirContainer: document.getElementById ('dir-container'), inInput: document.getElementById ('map-config-address' input '), unitInput: document.getElementById (' unitate de intrare '), startLatLng: null, // Obiecte API Google Maps dirService: new google.maps.DirectionsService (), dirRenderer: new google.maps.DirectionsRenderer : null, showDirections: funcția (dirResult, dirStatus) if (dirStatus! = google.maps.DirectionsStatus.OK) alert ('Instrucțiunile nu au reușit:' + dirStatus); întoarcere; // Afișați instrucțiunile WPmap.dirRenderer.setMap (WPmap.map); WPmap.dirRenderer.setPanel (WPmap.dirContainer); WPmap.dirRenderer.setDirections (dirResult); , getStartLatLng: funcția () var n = WPmap.toInput.value.split (","); WPmap.startLatLng = nou google.maps.LatLng (n [0], n [1]); , getSelectedUnitSystem: function () retur WPmap.unitInput.options [WPmap.unitInput.selectedIndex] .value == 'metric'? google.maps.DirectionsUnitSystem.METRIC: google.maps.DirectionsUnitSystem.IMPERIAL; , getDirections: funcție () var dinStr = WPmap.fromInput.value; // Obțineți codul poștal introdus var dirRequest = origine: fromStr, destinație: WPmap.startLatLng, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: WPmap.getSelectedUnitSystem (); WPmap.dirService.route (dirRequest, WPmap.showDirections); , init: function () // obține conținutul var infoWindowContent = WPmap.mapContainer.getAttribute ('data-map-infowindow'); var inițialZoom = WPmap.mapContainer.getAttribute ("date-map-zoom"); WPmap.getStartLatLng (); // configurați harta. WPmap.map = nou google.maps.Map (WPmap.mapContainer, zoom: parseInt (initialZoom), // asigurați-vă că este prezentat ca un centru întreg: WPmap.startLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP); // configurați marcatorul roșu cu marcator pini = noul google.maps.Marker (map: WPmap.map, position: WPmap.startLatLng, draggable: false); // setați conținutul infowindow infoWindow = nou google.maps.InfoWindow (content: infoWindowContent); infoWindow.open (WPmap.map, marcator); // a asculta când sunt solicitate Direcțiile google.maps.event.addListener (WPmap.dirRenderer, 'directions_changed', function () infoWindow.close (); // închide primul infoWindow marker.setVisible (false); // remove primul marcator // configurați șirurile de configurare care urmează să fie utilizate var distancestring = WPmap.dirRenderer.directions.routes [0] .legs [0] .distance.text; // setați conținutul infoWindow înainte de al deschide din nou. setContent ( "Mulțumiri!
Se pare că e vorba '+ distanța + șir +' departe de noi.
Direcțiile sunt chiar sub hartă "); // redeschideți infoWindow infoWindow.open (WPmap.map, marker); setTimeout (funcția () infoWindow.close (), 8000); // închideți-l după 8 secunde. ); // init; google.maps.event.addDomListener (fereastră, "încărcare", WPmap.init);
Când scriam acest tutorial, îmi testaam codul folosind tema TwentyEleven WordPress. Ceva a cauzat afișarea incorectă a săgeții din partea de jos a InfoWindow pe hartă. Este pentru că .intrare-conținut img
pe linia 857 are o lățimea maximă
a stabilit. Acest lucru înșelățește modul în care Google redă infoWindow. Pentru ao rezolva, introduceți-o undeva sub ea:
# hartă-container img max-width: none;