Ofrezca a sus clientes instrucciones de manejo con la API de Google Maps

En lugar de solo mostrar la ubicación de su negocio en un mapa de Google, ¿por qué no ofrecer a sus usuarios la oportunidad de obtener indicaciones de manejo en la misma página? No es necesario que abran una nueva ventana del navegador y la encuentren ellos mismos, podemos hacerlo mejor que eso!

Usar la API de Google Maps dentro de su sitio web de WordPress es un proceso relativamente simple y exploraremos exactamente cómo hacerlo en este tutorial.

Lo que haremos en este tutorial ...

  1. Primero vamos a configurar algunos opciones personalizadas para que podamos ingresar información sobre nuestro mapa en el panel de administración de WordPress.
  2. Luego usaremos códigos cortos para generar un contenedor de mapas, campos de entrada y contenedores de direcciones
  3. Finalmente escribiremos algo de JavaScript para iniciar el mapa de Google.

Nota: Vamos a escribir un poco de JavaScript aquí, ¡pero no te preocupes! Este es un tutorial de WordPress, así que siéntase libre de pasar por alto las partes de JavaScript :)


Paso 1 Crear el directorio y los archivos

  1. Crea una carpeta dentro de tu tema llamada Mapa
  2. Dentro de esta carpeta, crea map.php
  3. Finalmente crear map.js

Paso 2 Incluye el archivo map.php

En tus funciones.php archivo (ubicado en el directorio raíz de su tema) - incluya el map.php archivo que creaste en la parte superior.

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

Paso 3 Registrar Configuraciones

Hay 3 cosas que queremos poder editar desde el área de administración.

  1. El destino. Vamos a utilizar los valores de longitud y latitud para especificar la ubicación precisa de su destino (más detalles a continuación)
  2. los infoWindow contenido. Esta es la burbuja blanca que se ve a menudo en Google Maps. Queremos poder editar el texto en la burbuja.!
  3. Nivel de zoom inicial del mapa: cuánto se aleja el mapa cuando el usuario carga la página por primera vez.

En map.php, enganchar en admin_init Para registrar nuestros ajustes:

 función 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');

Ahora podemos configurar el texto del encabezado de nuestra sección en la página de opciones y todas las entradas que necesitamos.

 función map_config_option_text () echo '

Establece las opciones para el mapa aquí:

'; // Longitud, valores de latitud para la función de destino map_config_address () printf ((''), get_option (' map_config_address ')); // El contenido de texto para la función InfoWindow Bubble map_config_infobox () printf ((''), get_option (' map_config_infobox ')); // El nivel de zoom inicial del mapa. función map_config_zoom () printf ((''), get_option (' map_config_zoom '));

Finalmente nos enganchamos en admin_menu para mostrar nuestra configuración en el administrador de WordPress:

 función map_config_menu () add_settings_section ('map_config', 'Map Configuration', 'map_config_option_text', 'general'); add_settings_field ('map_config_address', 'Dirección - Longitud y latitud', '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 Level', 'map_config_zoom', 'general', 'map_config');  add_action ('admin_menu', 'map_config_menu');

Entra en tu área de administración, ahora deberías ver esto:


Paso 4 Ingrese su destino, infoWindow Text y Zoom Level

  1. Dirección de destino

    La API de Google Maps en realidad acepta direcciones regulares como 'Newgate Lane, Mansfield, Nottinghamshire, Reino Unido'. Sin embargo, encontrará que querrá ser más preciso con su destino (por ejemplo, lo más probable es que desee apuntar directamente a su negocio y no solo a la calle). Puede utilizar una muestra de Google Maps API V3 para buscar su destino. Arrastre el objetivo hasta que haya apuntado su punto. Cuando estés feliz, copia el Lat / Lng: valor en el campo de dirección en las opciones, por ejemplo 27.52774434830308, 42.18752500000007 (solo los números separados por comas, sin corchetes ni comillas)

  2. Texto de InfoWindow

    Haz esto lo que quieras. Su nombre de negocio sería una buena idea :)

  3. Nivel de zoom

    Un buen punto de partida es 10..

Haga clic en 'Guardar cambios' y cuando la página se actualice, puede verificar que la información se haya almacenado. Debería verse algo como esto ahora:


Paso 5 Configurar los códigos cortos

Cuando terminemos, tendremos 3 elementos: el Mapa, la Formar, y el Direcciones - así que en este tutorial he decidido dividirlos en 3 códigos cortos separados. Esto nos permitirá cambiar el orden / colocación de cada artículo sin tener que modificar ninguno de nuestros códigos PHP. Por ejemplo, puede decidir tener sus instrucciones sobre el mapa en lugar de debajo, o al lado, etc..

  1. Shortcode 1: wpmap_map

    Aquí registramos y ponemos en cola el archivo JavasScript de la API de Google Maps, así como el nuestro. maps.js expediente.

    A continuación usamos el $ salida variable para almacenar nuestra mapa-contenedor div junto con algunos atributos de datos personalizados. ( datos-mapa-infowindow almacenará el contenido para el infowindow y mapa de datos-zoom representará el nivel de zoom inicial; ambos valores se devuelven utilizando WordPress get_option función).

    Finalmente devolvemos el HTML generado para ser generado:

     function 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 ')); devuelve $ output; add_shortcode ('wpmap_map', 'wpmap_map');
  2. Shortcode 2: wpmap_directions_container

    Aquí simplemente devolvemos un vacío. div con una identificación de dir-container. Esto actuará como el contenedor para las direcciones..

     función wpmap_directions () $ output = '
    '; devuelve $ output; add_shortcode ('wpmap_directions_container', 'wpmap_directions');
  3. Shortcode 3: wpmap_directions_input

    Esto genera el marcado necesario para nuestro formulario..

    Aquí también es donde estableceremos nuestra última opción personalizada: la Dirección de destino. Esta vez, usaremos un campo de formulario oculto para mantener el valor de Latitud / Longitud que ingresamos anteriormente en el Panel de administración.

     función wpmap_directions_input () $ address_to = get_option ('map_config_address'); $ output = '
    Para instrucciones de manejo, ingrese su dirección a continuación:
    '; devuelve $ output; add_shortcode ('wpmap_directions_input', 'wpmap_directions_input');

Ahora que hemos configurado los códigos cortos, puede continuar y escribirlos en su Contáctenos página (o cualquier página que te guste).

Si obtiene una vista previa de la página ahora, todo lo que verá son los campos de entrada del formulario. Esto se debe a que aún no hemos escrito nuestro JavaScript que inicializará el Mapa y el div para las direcciones está actualmente vacío.

Nota: Antes de sumergirnos en el JavaScript, solo necesitamos agregar esto a nuestro style.css:

 # mapa-contenedor ancho: 100%; altura: 400px; 

Paso 7: Escribir JavaScript para interactuar con la API de Google Maps

¡Ahora es el momento de hacer que la magia suceda! Proporcionaré un resumen rápido de lo que vamos a hacer primero, y luego profundizaremos en el código..

  1. Primero vamos a crear un objeto. WMmap y asignarle propiedades (algunas de las cuales extraeremos del marcado que creamos en los códigos cortos)
  2. Luego agregaremos algunos métodos para manejar la funcionalidad del mapa y las direcciones..
  3. Uno de estos metodos, en eso, será responsable de cargar el mapa y también de configurar algunos valores predeterminados, como el texto de infoWindow, el nivel de zoom y la posición inicial del marcador (todo desde las opciones de WordPress)
  4. Finalmente, configuraremos un detector de eventos para cargar nuestro mapa cuando la página esté lista.

Listo?

Le explicaré cada parte del código paso a paso, pero no se preocupe si se pierde, lo pondremos todo junto al final..

Establecer propiedades

Vamos a crear nuestro objeto y establecer algunas propiedades. Aquí simplemente estamos consultando el DOM para recuperar los elementos HTML que contienen los valores que necesitamos. Los nombres de propiedades que estamos usando deben ser muy claros y autoexplicativos (mapContainer es obviamente el contenedor de mapas, etc :))

Aquí también obtenemos un par de objetos de la API que usaremos más adelante cuando tratemos con Directions.

 var WPmap = // Elementos HTML que usaremos más adelante! 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 '), // Objetos de la API de Google Maps dirService: new google.maps.DirectionsService (), dirRenderer: new google.maps.DirectionsRenderer (), map: null, / * continúa abajo * /

Los métodos

Estos también son parte de nuestra WPmap Objeto, si no está seguro de cómo se relaciona todo, asegúrese de consultar la parte inferior de este tutorial para ver todo el código a la vez..

showDirections ()

Esto se llama desde otro método que veremos más adelante, básicamente controla la inserción de las instrucciones en la página..

 / * dentro del objeto WPmap * / showDirections: function (dirResult, dirStatus) if (dirStatus! = google.maps.DirectionsStatus.OK) alert ('Indicaciones fallidas:' + dirStatus); regreso;  // Mostrar direcciones WPmap.dirRenderer.setMap (WPmap.map); WPmap.dirRenderer.setPanel (WPmap.dirContainer); WPmap.dirRenderer.setDirections (dirResult); ,

getStartLatLng ()

Esto se llama una vez de nuestro en eso método. Se establecerá la startLatLng propiedad igual a un google.maps.LatLng Objeto que podemos utilizar más adelante. Requiere que le proporcionemos valores separados de latitud y longitud, ¿cómo podemos hacer esto??

  1. En nuestro código breve insertamos un campo de formulario oculto que contiene el valor de Latitud y Longitud que establecimos en el Administrador de WordPress. Luego recuperamos el campo de formulario oculto y lo almacenamos en para ingresar. Esto significa que ahora podemos acceder al valor utilizando WPmap.toInput.value
  2. Sin embargo, el valor que establecemos en el formulario es solo una cadena con una coma que separa los números. Para separar los valores podemos dividir la cadena usando .división(","). Esto devolverá una matriz que contiene la latitud y la longitud como valores separados.
  3. Ahora podemos acceder a cada uno usando el índice de arrays.
 / * dentro del objeto WPmap * / getStartLatLng: function () var n = WPmap.toInput.value.split (","); WPmap.startLatLng = new google.maps.LatLng (n [0], n [1]); ,

getSelectedUnitSystem ()

Debido a que hemos permitido a nuestros usuarios seleccionar si prefieren direcciones en Métrico o Imperial, usamos este método para configurar DireccionesUnitSystem a cualquiera MÉTRICO o IMPERIAL.

 / * dentro del objeto WPmap * / getSelectedUnitSystem: function () return WPmap.unitInput.options [WPmap.unitInput.selectedIndex] .value == 'metric'? google.maps.DirectionsUnitSystem.METRIC: google.maps.DirectionsUnitSystem.IMPERIAL; ,

obtener las direcciones()

Este es el método que se llama cuando el usuario hace clic en el Obtener las direcciones botón.

  1. Primero obtenemos la dirección que el usuario ingresó y la almacenamos en el deStr variable.
  2. A continuación configuramos un objeto de opciones. - dirRequest. Esto contendrá las opciones necesarias para proporcionar las instrucciones de conducción.
    1. origen - La dirección que el usuario ingresó.
    2. destino - los google.maps.LatLng Objeto que contiene los valores de latitud y longitud de su destino..
    3. modo de viaje - Aquí nos aseguramos de que solo estamos recuperando las instrucciones de conducción.
    4. Unidad de sistema - Especifique qué unidad de medida usar según la elección del usuario.
  3. Finalmente, llamamos WPmap.dirService.route - y pasarle dos parámetros:
    1. dirRequest - Este es el objeto que contiene nuestras opciones..
    2. WPmap.showDirections - La función de devolución de llamada que maneja la colocación de las instrucciones en la página..
 / * dentro del objeto WPmap * / getDirections: function () var fromStr = WPmap.fromInput.value; var dirRequest = origen: fromStr, destino: WPmap.startLatLng, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: WPmap.getSelectedUnitSystem (); WPmap.dirService.route (dirRequest, WPmap.showDirections); ,

en eso()

Este es el método que se llama cuando se carga la página. Es responsable de:

  1. Iniciando el mapa, centrado en tu dirección..
  2. Recuperar los valores necesarios para configurar el texto de infoWindow y el nivel de zoom inicial.
  3. Configurar un pin marcador que muestre su dirección.
  4. Escuchando cuándo, cuando un usuario hace clic en 'Obtener indicaciones' para que pueda eliminar el marcador inicial y la ventana de información
 init: function () // obtener el texto de la ventana de información y el nivel de zoom var infoWindowContent = WPmap.mapContainer.getAttribute ('data-map-infowindow'); var initialZoom = WPmap.mapContainer.getAttribute ('data-map-zoom'); // llama al método que establece WPmap.startLatLng WPmap.getStartLatLng (); // configura el mapa. WPmap.map = new google.maps.Map (WPmap.mapContainer, zoom: parseInt (initialZoom), centro: WPmap.startLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP); // configura el marcador rojo pin marker = new google.maps.Marker (map: WPmap.map, position: WPmap.startLatLng, draggable: false); // configura el contenido de la ventana de información infoWindow = new google.maps.InfoWindow (content: infoWindowContent); infoWindow.open (WPmap.map, marcador); // escuchar cuando se solicitan indicaciones google.maps.event.addListener (WPmap.dirRenderer, 'Directions_changed', function () infoWindow.close (); // cerrar el infoWindow marker.setVisible (false) inicial; // eliminar el marcador inicial); //en eso ;// <-- this is the end of the object.

** Opcional **

Si desea mostrar un mensaje agradable (como el que se ve a continuación) a sus usuarios después de que hayan solicitado instrucciones, simplemente copie el código debajo de la imagen en el detector de eventos dentro del en eso método.

Opcional Gracias mensaje:

 // Obtenga la distancia del viaje var distanceString = WPmap.dirRenderer.directions.routes [0] .legs [0] .distance.text; // configura el contenido de la ventana de información antes de abrirlo de nuevo. infoWindow.setContent ('Gracias!
Parece que estás cerca '+ distanceString +' lejos de nosotros.
Las direcciones están justo debajo del mapa '); // vuelve a abrir infoWindow infoWindow.open (WPmap.map, marcador); setTimeout (function () infoWindow.close (), 8000); // cerrarla después de 8 segundos.

Paso 8 Agregue la escucha de eventos que cargará el mapa

¿Sigues conmigo? Hemos hecho todo lo posible para terminar ahora y todo lo que queda por hacer es llamar al WPmap.init () Método cuando se carga la página. Agrega esto al fondo de map.js

 google.maps.event.addDomListener (window, 'load', WPmap.init);

Poniendo todos los JavaScript juntos

Hemos cubierto un mucho de terreno aquí, así que veamos cómo se ve cuando está todo junto.

 var WPmap = // Elementos HTML que usaremos más adelante! 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, // Objetos de la API de Google Maps dirService: new google.maps.DirectionsService (), dirRenderer: new google.maps.DirectionsRenderer (), map : null, showDirections: function (dirResult, dirStatus) if (dirStatus! = google.maps.DirectionsStatus.OK) alert ('Indicaciones fallidas:' + dirStatus); regreso;  // Mostrar direcciones 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; // Obtenga el código postal que ingresó var dirRequest = origen: fromStr, destino: WPmap.startLatLng, travelMode: google.maps.DirectionsTravelMode.DRIVING, unitSystem: WPmap.getSelectedUnitSystem ()); WPmap.dirService.route (dirRequest, WPmap.showDirections); , init: function () // obtener el contenido var infoWindowContent = WPmap.mapContainer.getAttribute ('data-map-infowindow'); var initialZoom = WPmap.mapContainer.getAttribute ('data-map-zoom'); WPmap.getStartLatLng (); // configura el mapa. WPmap.map = new google.maps.Map (WPmap.mapContainer, zoom: parseInt (initialZoom), // asegúrese de que aparezca como un centro de enteros: WPmap.startLatLng, mapTypeId: google.maps.MapTypeId.ROADMAP); // configura el marcador de marcador rojo = nuevo google.maps.Marker (map: WPmap.map, position: WPmap.startLatLng, draggable: false); // configura el contenido de la ventana de información infoWindow = new google.maps.InfoWindow (content: infoWindowContent); infoWindow.open (WPmap.map, marcador); // escuchar cuando se solicitan indicaciones google.maps.event.addListener (WPmap.dirRenderer, 'Directions_changed', function () infoWindow.close (); // cerrar el primer infoWindow marker.setVisible (false); // eliminar el primer marcador // las cadenas de configuración que se utilizarán. var distanceString = WPmap.dirRenderer.directions.routes [0] .legs [0] .distance.text; // establezca el contenido de infoWindow antes de abrirlo de nuevo. infoWindow. setContent ('Gracias!
Parece que estás cerca '+ distanceString +' lejos de nosotros.
Las direcciones están justo debajo del mapa '); // vuelve a abrir infoWindow infoWindow.open (WPmap.map, marcador); setTimeout (function () infoWindow.close (), 8000); // Ciérralo después de 8 segundos. ); //en eso ; google.maps.event.addDomListener (window, 'load', WPmap.init);

Notas del tutorial

  1. Asegúrese de investigar cualquier cosa que no entienda en el sitio web de Google Maps API.
  2. Al escribir este tutorial, estaba probando mi código usando el tema de WordPress de TwentyEleven. Algo causaba que la flecha en la parte inferior de la ventana de información en el mapa se mostrara incorrectamente. Eso es porque .entrada de contenido img en línea 857 tiene un anchura máxima conjunto. Esto arruina la forma en que Google representa la ventana de información. Para solucionarlo, ingresa esto en algún lugar debajo de él:

     # map-container img max-width: none;