Geben Sie Ihren Kunden eine Wegbeschreibung mit dem Google Maps-API

Anstatt Ihren Unternehmensstandort in einer Google Map anzuzeigen, bieten Sie Ihren Nutzern nicht die Möglichkeit, Wegbeschreibungen auf derselben Seite anzuzeigen. Sie müssen kein neues Browserfenster öffnen und selbst finden, wir können es besser machen!

Die Verwendung der Google Maps-API in Ihrer WordPress-Website ist ein relativ einfacher Prozess. In diesem Lernprogramm erfahren Sie genau, wie Sie dies tun können.

Was machen wir in diesem Tutorial?

  1. Zuerst werden wir einige einrichten benutzerdefinierte Optionen Damit wir Informationen über unsere Karte in das WordPress Admin-Bedienfeld eingeben können.
  2. Dann verwenden wir Shortcodes, um einen Kartencontainer, Eingabefelder und einen Routencontainer auszugeben
  3. Zum Schluss schreiben wir noch etwas JavaScript, um die Google Map zu starten

Hinweis: Wir werden hier einiges an JavaScript schreiben, aber keine Sorge! Dies ist ein WordPress-Tutorial, also zögern Sie nicht, die JavaScript-Teile zu beschönigen :)


Schritt 1 Erstellen Sie das Verzeichnis und die Dateien

  1. Erstellen Sie in Ihrem Design einen Ordner mit dem Namen Karte
  2. In diesem Ordner erstellen Sie map.php
  3. Schließlich erstellen map.js

Schritt 2 Fügen Sie die Datei map.php ein

In deiner Functions.php Datei (im Stammverzeichnis des Designs) - schließen Sie das ein map.php Datei, die Sie oben erstellt haben.

 / * functions.php * / include ('map / map.php');

Schritt 3 Registrieren Sie die Einstellungen

Es gibt drei Dinge, die wir im Admin-Bereich bearbeiten können.

  1. Das Ziel. Wir werden die Längen- und Breitengrade verwenden, um den genauen Ort Ihres Ziels anzugeben (weitere Details folgen).
  2. Das infoWindow Inhalt. Dies ist die weiße Blase, die Sie oft in Google Maps sehen - wir möchten den Text in der Blase bearbeiten können!
  3. Anfängliche Zoomstufe der Karte - Wie weit wird die Karte vergrößert, wenn der Benutzer die Seite zum ersten Mal lädt.

Im map.php, einhaken admin_init um unsere Einstellungen zu registrieren:

 function 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');

Jetzt können wir auf der Optionsseite den Überschriftentext für unseren Abschnitt und alle Eingaben einrichten, die wir benötigen.

 Funktion map_config_option_text () echo '

Legen Sie hier die Optionen für die Karte fest:

'; // Längengrad, Breitengradwerte für die Zielfunktion map_config_address () printf ((''), get_option (' map_config_address ')); // Der Textinhalt für die InfoWindow-Bubble-Funktion map_config_infobox () printf ((''), get_option (' map_config_infobox ')); // Die anfängliche Zoomstufe der Karte. Funktion map_config_zoom () printf (('''), get_option (' map_config_zoom '));

Schließlich haken wir uns ein admin_menu um unsere Einstellungen im WordPress Admin anzuzeigen:

 function map_config_menu () add_settings_section ('map_config', 'Map Configuration', 'map_config_option_text', 'general'); add_settings_field ('map_config_address', 'Adresse - Längengrad und Breitengrad', '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', 'Map-Zoom-Ebene', 'map_config_zoom', 'general', 'map_config'));  add_action ('admin_menu', 'map_config_menu');

Gehen Sie in Ihren Admin-Bereich, Sie sollten jetzt folgendes sehen:


Schritt 4 Geben Sie Ihr Ziel, infoWindow-Text und die Zoomstufe ein

  1. Zieladresse

    Das Google Maps-API akzeptiert eigentlich reguläre Adressen wie "Newgate Lane, Mansfield, Nottinghamshire, UK". Sie werden jedoch feststellen, dass Sie mit Ihrem Ziel genauer sein möchten (beispielsweise möchten Sie wahrscheinlich darauf hinweisen.) direkt zu Ihrem Unternehmen und nicht nur zur Straße). Sie können ein Google Maps API V3-Beispiel verwenden, um nach Ihrem Ziel zu suchen. Ziehen Sie das Ziel herum, bis Sie Ihre Stelle mit der Nadel markiert haben. Wenn du glücklich bist, kopiere die Lat / Lng: Wert in das Adressfeld in den Optionen - zum Beispiel 27.52774434830308, 42.18752500000007 (nur die durch Komma getrennten Zahlen, keine Klammern oder Anführungszeichen!)

  2. InfoWindow-Text

    Mach das, was du willst. Ihr Geschäftsname wäre eine gute Idee :)

  3. Zoomstufe

    Ein guter Ausgangspunkt ist 10.

Klicken Sie auf "Änderungen speichern". Wenn die Seite aktualisiert wird, können Sie überprüfen, ob die Informationen gespeichert wurden. Es sollte jetzt ungefähr so ​​aussehen:


Schritt 5 Richten Sie die Kurzwahlen ein

Wenn wir fertig sind, haben wir 3 Elemente: die Karte, das Bilden, und das Richtungen - In diesem Tutorial habe ich mich daher entschlossen, sie in 3 separate Kurzcodes aufzuteilen. Dadurch können wir die Reihenfolge / Platzierung jedes Artikels ändern, ohne unseren PHP-Code ändern zu müssen. Sie können sich beispielsweise dafür entscheiden, dass sich Ihre Route über der Karte anstatt unter oder neben der Karte befindet.

  1. Kurzcode 1: wpmap_map

    Hier registrieren und erfassen wir die Google Maps API-JavasScript-Datei sowie unsere eigene maps.js Datei.

    Als nächstes benutzen wir die $ ausgabe Variable zur Speicherung unserer Kartencontainer div zusammen mit einigen benutzerdefinierten Datenattributen. ( Daten-Karten-Infofenster speichert den Inhalt für das Infofenster und Daten-Map-Zoom stellt die anfängliche Zoomstufe dar - beide Werte werden mit WordPress zurückgegeben get_option Funktion).

    Zum Schluss geben wir den generierten HTML-Code zur Ausgabe zurück:

     Funktion wpmap_map () wp_register_script ('google-maps', 'http://maps.google.com/maps/api/js?sensor=false'); wp_enqueue_script ('google-maps'); wp_register_script ('wptuts-custom', get_template_directory_uri (). '/map/map.js', ",", true); wp_enqueue_script ('wptuts-custom'); $ output = sprintf ('
    ', get_option (' map_config_infobox '), get_option (' map_config_zoom ')); return $ output; add_shortcode ('wpmap_map', 'wpmap_map');
  2. Kurzcode 2: wpmap_directions_container

    Hier geben wir einfach eine leere zurück div mit einer ID von dir-container. Dies dient als Container für die Anweisungen.

     Funktion wpmap_directions () $ output = '
    '; return $ output; add_shortcode ('wpmap_directions_container', 'wpmap_directions');
  3. Kurzcode 3: wpmap_directions_input

    Dadurch wird der für unser Formular erforderliche Markup generiert.

    Hier legen wir auch unsere letzte benutzerdefinierte Option fest - die Zieladresse. Dieses Mal verwenden wir ein ausgeblendetes Formularfeld, um den Latitude / Longitude-Wert zu speichern, den wir zuvor im Admin-Panel eingegeben haben.

     Funktion wpmap_directions_input () $ address_to = get_option ('map_config_address'); $ output = '
    Geben Sie für die Anfahrtsbeschreibung unten Ihre Adresse ein:
    '; return $ output; add_shortcode ('wpmap_directions_input', 'wpmap_directions_input');

Jetzt haben wir die Kurzwahlen eingerichtet, die Sie eingeben und in Ihre eingeben können Kontaktiere uns Seite (oder eine beliebige Seite).

Wenn Sie jetzt eine Vorschau der Seite anzeigen, werden Sie nur die Formulareingabefelder sehen. Das liegt daran, dass wir kein JavaScript geschrieben haben, mit dem die Karte noch initialisiert wird und das Div für die Richtungen derzeit leer ist.

Hinweis: Bevor wir in das JavaScript eintauchen, müssen wir dies nur zu unserem hinzufügen style.css:

 # map-container width: 100%; Höhe: 400px; 

Schritt 7 Erstellen von JavaScript zur Interaktion mit der Google Maps-API

Jetzt ist es an der Zeit, den Zauber zu verwirklichen! Ich werde kurz erklären, was wir zuerst tun werden, dann werden wir direkt in den Code einsteigen.

  1. Zuerst erstellen wir ein Objekt WMmap und weisen Sie ihm Eigenschaften zu (einige davon werden wir aus dem Markup herausgreifen, das wir in den Kurzwahlen erstellt haben)
  2. Dann fügen wir ein paar Methoden hinzu, um die Funktionalität der Karte und Wegbeschreibungen zu behandeln.
  3. Eine dieser Methoden, drin, ist verantwortlich für das Laden der Karte sowie für das Festlegen einiger Standardwerte wie infoWindow-Text, Zoomstufe und anfängliche Markerposition (alle über WordPress-Optionen)
  4. Schließlich wird ein Ereignis-Listener eingerichtet, der unsere Karte lädt, sobald die Seite fertig ist.

Bereit?

Ich erkläre jeden Teil des Codes Schritt für Schritt, aber machen Sie sich keine Sorgen, wenn Sie sich verlaufen, wir werden alles am Ende zusammenfügen.

Eigenschaften festlegen

Lassen Sie uns unser Objekt erstellen und einige Eigenschaften festlegen. Hier fragen wir einfach das DOM ab, um die HTML-Elemente abzurufen, die die benötigten Werte enthalten. Die Namen der verwendeten Objekte sollten sehr klar und selbsterklärend sein (mapContainer ist natürlich der Map-Container usw. :))

Hier erhalten wir auch einige Objekte von der API, die wir später verwenden werden, wenn wir uns mit Anweisungen befassen.

 var WPmap = // HTML-Elemente, die wir später verwenden werden! mapContainer: document.getElementById ('map-container'), dirContainer: document.getElementById ('dir-container'), toInput: document.getElementById ('map-config-address'), fromInput: document.getElementById ('from- input '), unitInput: document.getElementById (' unit-input '), // Google Maps-API-Objekte dirService: new google.maps.DirectionsService (), dirRenderer: new google.maps.DirectionsRenderer (), map: null, / * geht weiter unter * /

Die Methoden

Diese sind auch Teil unseres WPmap Wenn Sie sich nicht sicher sind, wie alles zusammenpasst, sollten Sie am Ende dieses Tutorials nachsehen, um den gesamten Code zusammen zu sehen.

showDirections ()

Dies wird von einer anderen Methode aus aufgerufen, die wir später sehen werden. Sie steuert im Wesentlichen das Einfügen der Anweisungen in die Seite.

 / * innerhalb des WPmap-Objekts * / showDirections: function (dirResult, dirStatus) if (dirStatus! = google.maps.DirectionsStatus.OK) alert ('Richtungen fehlgeschlagen:' + dirStatus); Rückkehr;  // Anweisungen anzeigen WPmap.dirRenderer.setMap (WPmap.map); WPmap.dirRenderer.setPanel (WPmap.dirContainer); WPmap.dirRenderer.setDirections (dirResult); ,

getStartLatLng ()

Dies wird einmal von uns aufgerufen drin Methode. Es wird das einstellen startLatLng Eigenschaft gleich a google.maps.LatLng Objekt, das wir später verwenden können. Es erfordert, dass wir separate Breiten- und Längengrade angeben - wie können wir das tun??

  1. In unseren Shortcode haben wir ein ausgeblendetes Formularfeld eingefügt, das den Latitude & Longitude-Wert enthält, den wir in WordPress Admin festgelegt haben. Dann haben wir das ausgeblendete Formularfeld abgerufen und in gespeichert eingeben. Dies bedeutet, dass wir jetzt auf den Wert zugreifen können WPmap.toInput.value
  2. Der Wert, den wir im Formular festlegen, ist jedoch nur eine Zeichenfolge, deren Zahlen durch ein Komma getrennt werden. Um die Werte zu trennen, können wir die Zeichenfolge mit zerlegen .Teilt(","). Dadurch wird ein Array mit den Breiten- und Längengraden als separate Werte zurückgegeben.
  3. Jetzt können wir auf jeden einzelnen zugreifen, indem Sie den Array-Index verwenden.
 / * innerhalb des WPmap-Objekts * / getStartLatLng: function () var n = WPmap.toInput.value.split (","); WPmap.startLatLng = new google.maps.LatLng (n [0], n [1]); ,

getSelectedUnitSystem ()

Da wir unseren Benutzern erlaubt haben, auszuwählen, ob sie Richtungen in Metric oder Imperial bevorzugen, verwenden wir diese Methode zum Festlegen DirectionsUnitSystem entweder METRISCH oder KAISERLICHE.

 / * innerhalb des WPmap-Objekts * / getSelectedUnitSystem: function () return WPmap.unitInput.options [WPmap.unitInput.selectedIndex] .value == 'metric'? google.maps.DirectionsUnitSystem.METRIC: google.maps.DirectionsUnitSystem.IMPERIAL; ,

Anweisungen bekommen()

Dies ist die Methode, die aufgerufen wird, wenn der Benutzer auf klickt Anweisungen bekommen Taste.

  1. Zuerst erhalten wir die Adresse, die der Benutzer eingegeben hat, und speichern sie im vonStr Variable.
  2. Als Nächstes richten wir ein Optionsobjekt ein - dirRequest. Dieses enthält die Optionen, die zur Angabe der Fahranweisungen erforderlich sind.
    1. Ursprung - Die Adresse, die der Benutzer eingegeben hat.
    2. Ziel - Das google.maps.LatLng Objekt mit den Breiten- und Längenwerten Ihres Ziels.
    3. travelMode - Hier stellen wir sicher, dass wir nur eine Wegbeschreibung abrufen.
    4. Einheitssystem - Geben Sie an, welche Maßeinheit je nach Wahl des Benutzers verwendet werden soll.
  3. Zum Schluss rufen wir an WPmap.dirService.route - und übergeben Sie ihm zwei Parameter:
    1. dirRequest - Dies ist das Objekt, das unsere Optionen enthält.
    2. WPmap.showDirections - die Rückruffunktion, die die Platzierung der Anweisungen auf der Seite übernimmt.
 / * innerhalb des WPmap-Objekts * / getDirections: function () var fromStr = WPmap.fromInput.value; var dirRequest = origin: fromStr, Ziel: WPmap.startLatLng, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: WPmap.getSelectedUnitSystem (); WPmap.dirService.route (dirRequest, WPmap.showDirections); ,

drin()

Dies ist die Methode, die aufgerufen wird, wenn die Seite geladen wird. Es ist verantwortlich für:

  1. Initiieren der Karte, zentriert auf Ihre Adresse.
  2. Abrufen von Werten, die zum Einstellen des infoWindow-Texts und der anfänglichen Zoomstufe erforderlich sind.
  3. Setzen Sie einen Markierungsstift, der Ihre Adresse anzeigt.
  4. Warten auf, wann ein Benutzer auf "Wegbeschreibung abrufen" klickt, damit er den ursprünglichen Marker und das infoWindow entfernen kann
 init: function () // Liefert den Infowindow-Text und die Zoomstufe var infoWindowContent = WPmap.mapContainer.getAttribute ('data-map-infowindow'); var initialZoom = WPmap.mapContainer.getAttribute ('data-map-zoom'); // die Methode aufrufen, die WPmap.startLatLng setzt WPmap.getStartLatLng (); // die Karte einrichten WPmap.map = new google.maps.Map (WPmap.mapContainer, zoom: parseInt (initialZoom), Mitte: WPmap.startLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP); // setze den roten Marker-Pin marker = new google.maps.Marker (map: WPmap.map, Position: WPmap.startLatLng, draggable: false); // Setze den Infowindow-Inhalt infoWindow = new google.maps.InfoWindow (content: infoWindowContent); infoWindow.open (WPmap.map, Markierung); // Hören Sie auf, wenn Anweisungen angefordert werden. google.maps.event.addListener (WPmap.dirRenderer, 'direction_changed', function () infoWindow.close (); // schließe den ursprünglichen infoWindow marker.setVisible (false); // remove die Anfangsmarkierung); //drin ;// <-- this is the end of the object.

** Wahlweise **

Wenn Sie Ihren Benutzern eine nette Nachricht (wie die unten abgebildete) anzeigen möchten, nachdem sie Anweisungen angefordert haben, kopieren Sie einfach den Code unter dem Bild in den Ereignis-Listener im drin Methode.

Wahlweise Vielen Dank Botschaft:

 // Ermittle die Entfernung der Fahrt var distanceString = WPmap.dirRenderer.directions.routes [0] .legs [0] .distance.text; // den Inhalt des infoWindow einstellen, bevor wir es erneut öffnen. infoWindow.setContent ('Danke!
Sieht aus, als wärst du dabei '+ distanceString +' weg von uns.
Anweisungen sind knapp unter der Karte '); // Öffne das InfoWindow erneut. infoWindow.open (WPmap.map, Marker); setTimeout (function () infoWindow.close (), 8000); // nach 8 Sekunden schließen.

Schritt 8 Fügen Sie den Ereignislistener hinzu, der die Karte lädt

Sind Sie noch da? Wir haben es bis zum Ende geschafft und jetzt müssen wir nur noch den WPmap.init () Methode, wenn die Seite geladen wird. Fügen Sie dies auf der Unterseite von hinzu map.js

 google.maps.event.addDomListener (Fenster, 'Laden', WPmap.init);

Alles JavaScript zusammenstellen

Wir haben ein Thema behandelt Menge Grund hier, also mal sehen, wie es aussieht, wenn alles zusammengefügt ist.

 var WPmap = // HTML-Elemente, die wir später verwenden werden! mapContainer: document.getElementById ('map-container'), dirContainer: document.getElementById ('dir-container'), toInput: document.getElementById ('map-config-address'), fromInput: document.getElementById ('from- input '), unitInput: document.getElementById (' unit-input '), startLatLng: null, // Google Maps-API-Objekte dirService: new google.maps.DirectionsService (), dirRenderer: new google.maps.DirectionsRenderer (), map : null, showDirections: function (dirResult, dirStatus) if (dirStatus! = google.maps.DirectionsStatus.OK) alert ('Richtungen fehlgeschlagen:' + dirStatus); Rückkehr;  // Anweisungen anzeigen WPmap.dirRenderer.setMap (WPmap.map); WPmap.dirRenderer.setPanel (WPmap.dirContainer); WPmap.dirRenderer.setDirections (dirResult); , getStartLatLng: function () var n = WPmap.toInput.value.split (","); WPmap.startLatLng = new google.maps.LatLng (n [0], n [1]); , getSelectedUnitSystem: function () return WPmap.unitInput.options [WPmap.unitInput.selectedIndex] .value == 'metric'? google.maps.DirectionsUnitSystem.METRIC: google.maps.DirectionsUnitSystem.IMPERIAL; , getDirections: function () var fromStr = WPmap.fromInput.value; // Abrufen der eingegebenen Postleitzahl var dirRequest = origin: fromStr, Ziel: WPmap.startLatLng, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: WPmap.getSelectedUnitSystem (); WPmap.dirService.route (dirRequest, WPmap.showDirections); , init: function () // den Inhalt abrufen var infoWindowContent = WPmap.mapContainer.getAttribute ('data-map-infowindow'); var initialZoom = WPmap.mapContainer.getAttribute ('data-map-zoom'); WPmap.getStartLatLng (); // die Karte einrichten WPmap.map = new google.maps.Map (WPmap.mapContainer, zoom: parseInt (initialZoom), // sorgt dafür, dass es als Integer-Zentrum durchkommt: WPmap.startLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP); // Setze den roten Pin-Marker marker = new google.maps.Marker (map: WPmap.map, Position: WPmap.startLatLng, draggable: false); // Setze den Infowindow-Inhalt infoWindow = new google.maps.InfoWindow (content: infoWindowContent); infoWindow.open (WPmap.map, Markierung); // Hören, wann Anweisungen angefordert werden google.maps.event.addListener (WPmap.dirRenderer, 'direction_changed', function () infoWindow.close (); // erste InfoWindow marker.setVisible (false); // schließen die ersten zu verwendenden Markierungs- / Setup-Zeichenfolgen var distanceString = WPmap.dirRenderer.directions.routes [0] .legs [0] .distance.text; // den Inhalt des infoWindow festlegen, bevor es erneut geöffnet wird. infoWindow. setContent ('Danke!
Sieht aus, als wärst du dabei '+ distanceString +' weg von uns.
Anweisungen sind knapp unter der Karte '); // Öffne das InfoWindow erneut. infoWindow.open (WPmap.map, Marker); setTimeout (function () infoWindow.close (), 8000); // nach 8 Sekunden schließen ); //drin ; google.maps.event.addDomListener (Fenster, 'Laden', WPmap.init);

Tutorial-Hinweise

  1. Informieren Sie sich auf der Google Maps API-Website von Google über alles, was Sie nicht verstehen
  2. Beim Schreiben dieses Tutorials habe ich meinen Code mit dem gängigen TwentyEleven WordPress Theme getestet. Der Pfeil am unteren Rand des InfoWindow auf der Karte wurde nicht richtig angezeigt. Es ist, weil .Eintrag-Inhalt img auf Zeile 857 hat ein maximale Breite einstellen. Dies verfälscht die Art und Weise, wie Google das infoWindow rendert. Um das Problem zu beheben, geben Sie dies irgendwo darunter ein:

     # map-container img max-width: none;