Este plugin no se ha probado con las últimas 3 versiones mayores de WordPress. Puede que ya no tenga soporte ni lo mantenga nadie, o puede que tenga problemas de compatibilidad cuando se usa con las versiones más recientes de WordPress.

Extensión de Contact Form 7 para campos de Google Map

Descripción

Este plugin activa la inserción de Google maps en contact form 7 como campo de entrada, la funcionalidad disponible con este plugin incluye

  • Múltiples mapas por formulario: La ampliación y la ubicación por defecto se ajustan en la página de edición del formulario, por lo que los distintos mapas o formularios pueden tener distintos niveles de ampliación y ubicación de los pines por defecto. El formulario de interfaz muestra el mapa ajustado y registra el cambio de ubicación del pin, que se puede incluir en el aviso por correo electrónico.

  • Compatible con Post My CF7 Form: Juega bien con el plugin Post My CF7 Form

  • Barra de búsqueda de direcciones: Hay un campo de búsqueda disponible para buscar direcciones; si un usuario cambia manualmente la primera línea del campo de dirección (opcional), el código geográfico inverso se congela. Esto permite correcciones de dirección.

  • Geocodificación inversa: Se puede activar un conjunto opcional de campos de dirección desde la etiqueta cf7 para mostrar la dirección de texto de codificación geográfica inversa.

  • Totalmente personalizable: Se proporciona un conjunto de filtros para controlar todos los parámetros de configuración en cada mapa.

  • Compatible con ventanas emergentes: Este complemento permite a los usuarios controlar la inicialización diferida del mapa en ventanas emergentes.

  • Personalizar acciones de mapa: El plugin expone el objeto de mapa con eventos (en la inicialización/actualización), lo que permite a los usuarios añadir características adicionales a tus mapas. El plugin usa el plugin JQuery Google Maps (gmap3) y expone tanto los objetos de mapas de Gmap3 como los de Google.

El mapa de Google está desactivado para el activado del plugin Modo Avión para permitirte desarrollar sin conexión a Internet.

Funciona bien con construcciones de campos repetitivos del plugin Smart Grid-Layout extension for CF7.

Consulta nuestras otras extensiones del plugin CF7

  • CF7 Polylang Module: Este complemento te permite crear formularios en diferentes idiomas para un sitio web multilingüe. El plugin requiere que esté instalado el plugin Polylang para poder gestionar las traducciones.

  • Smart Grid-layout Extension for CF7: Este plugin corrige muchas deficiencias del plugin CF7 y lo más importante es que te permite crear un formulario responsivo con diseño de cuadrícula (varias filas/varias columnas), entre muchas otras funciones útiles.

  • Post My CF7 Form: Este plugin te permite guardar los envíos de tu formulario CF7 en una entrada personalizada y asignar tus campos a metacampos o taxonomía. También te permite completar previamente los campos antes de que se muestre tu formulario.

Datos finales en forma de diapositiva

Capturas

  • Guarda tu clave API de Google en los ajustes; de lo contrario, tu mapa no funcionará
  • Inserte una etiqueta de Google Map en tu formulario cf7
  • Puedes establecer los parámetros por defecto para tu mapa, esto se usará para mostrar el nivel de ampliación por defecto, así como la ubicación del pin en el formulario.
  • El mapa está ajustado por defecto para ocupar el 100% del ancho del formulario y una altura de 120 px. Anula esto en la hoja de estilo CSS de tu child para aumentar el tamaño de tu mapa.
  • Los campos de dirección opcionales se completan automáticamente mediante la búsqueda de código geográfico inverso. El mapa contiene un campo de búsqueda para localizar una dirección (deberás activar las API de Google adecuadas).

Instalación

  1. Desempaqueta cf7-google-map.zip en el directorio /wp-content/plugins/
  2. Activa el plugin a través del menú «Plugins» en WordPress
  3. Obtén una clave API de Google Map e insértala en el plugin Ajustes; Página de mapas de Google CF7. Asegúrate de activar las API requeridas (consulta la FAQ #).
  4. Crea un nuevo formulario en el editor CF7. Selecciona la etiqueta [Google Map] y configura tu mapa.
  5. El plugin crea 2 etiquetas de correo electrónico para la ubicación enviada, lat-<field-name' ylng-`. Esto te permite incluir varios mapas en un solo formulario si es necesario.

FAQ

1. Mi mapa está oscurecido o es «negativo» y tiene una marca de agua con el texto «solo para fines de desarrollo».

Este es un problema con tu clave API de Google que no tiene las API activadas. Debes asegurarte de varias cosas. Si has activado tanto la opción API de codificación geográfica como Google Places en los ajustes del plugin, entonces debes asegurarte de que esas API estén activadas en tu clave. Para activar las API, inicia sesión en tu escritorio de Google, selecciona tu proyecto (o crea uno nuevo) y navega hasta la sección API y servicios. Luego puedes activar/añadir API y buscar la API de codificación geográfica y la API de Google Places y activar las que necesites. Si aún tienes este problema, consulta los otros pasos de Google en estas FAQ acerca de este problema.

2. Soy de Brasil/Canadá/India y mi mapa no funciona.

Si tienes el problema descrito en la FAQ n.° 1 anterior y has activado todas las API necesarias, pero tu mapa sigue sin funcionar, es probable que el problema esté relacionado con la facturación. Las solicitudes de Brasil, Canadá e India deben tener claves API para proyectos vinculados a una cuenta con facturación activada. Consulta este problema en las FAQ de Google.

3. ¿Cómo recupero un valor de latitud/longitud cuando envío mi formulario?

Los formularios envían un $_POST['lat-<map-field-name>'] y un $_POST['lng-<map-field-name>'] a los que puedes acceder conectando el gancho de acción cf7 wpcf7_mail_sent así como wpcf7_mail_failed en caso de que el correo haya fallado, pero el formulario aún se haya enviado correctamente.

add_action('wpcf7_mail_sent', 'get_lat_lng_values');
add_action('wpcf7_mail_failed', 'get_lat_lng_values');
function get_lat_lng_values(){
  //assuming your map field is named your-location,
  if(!isset($_POST['lat-your-location'])) return;
  $lat = $_POST['lat-your-location'];
  $lng = $_POST['lng-your-location'];
}

4. ¿Cómo puedo mostrar un enlace a una ubicación en el mapa de Google en el correo de aviso?

Suponiendo que creaste un campo de mapa llamado «tu-ubicación», la etiqueta de correo [tu-ubicación], mostrará por defecto las coordenadas «lat,lng» de la ubicación que tu usuario seleccionó.
Puedes crear un enlace de mapa de Google como,

<a href="http://maps.google.com/maps?q=[lat-your-location],[lng-your-location]&ll=[lat-your-location],[lng-your-location]&z=8">Location map</a>

esto creará un enlace a un mapa centrado en las coordenadas con un marcador de ubicación en las coordenadas. También puedes cambiar el valor de zoom z al nivel deseado.

5. ¿Cómo configurar campos de dirección personalizados?

En algunos países (Japón, Alemania, España…) el orden de los campos de dirección cambia, por lo que puede ser conveniente diseñar un formulario con campos de dirección en el orden en el que el usuario escribiría naturalmente una dirección postal. Para ello, la versión 1.4 de este plugin introduce la funcionalidad de campos personalizados. Depende de ti crear o añadir campos de texto adicionales en tu formulario que se completarán mediante eventos de JavaScript.

A continuación se muestra un ejemplo de un formulario con una etiqueta de mapa y campos de dirección adicionales, junto con algo de JavaScript personalizado para garantizar que los campos se completen correctamente cuando un usuario interactúa con el mapa.

  <p>[map your-location custom_address "zoom:7;clat:12.044014700107471;clng:79.32083256126546;lat:12.007089;lng:79.810600"]
 <p id="line">Your address (street) [text your-address-line]</p>
 <p id="city">Your address (city) [text your-address-city]</p>
 <p id="pincode">Your address (pin) [text your-address-pin]</p>
 [submit "Send"]
 <script type="text/javascript">
   (function($){
     $(document).ready( function(){
       $('.cf7-google-map-container.your-location').on('update.cf7-google-map', function(e){
         //the event has 5 address fields, e.address.line, e.address.city, e.address.pin, e.address.state, e.address.country.
         //some fields may be empty.
         $('p#line input').val(e.address.line);
         $('p#city input').val(e.address.city);
         $('p#pincode input').val(e.address.pin);
       })
     })
   })(jQuery)
 </script>

Si usas la etiqueta de dirección de correo electrónico en tu aviso de correo electrónico y quieres que tus usuarios modifiquen la dirección que se muestra a través de tus campos personalizados, entonces es importante que actives un evento similar al anterior en el contenedor del mapa. Esto notificará al plugin para que actualice el campo de dirección completo que se usará para completar la etiqueta de correo electrónico.

$('p#line input, p#city input, p#pincode input').on('change', function(){
  var event = $.Event("update.cf7-google-map", {
      'address': {
        'line': '', /*insert the first line here*/
        'city': '', /*insert the city here*/
        'state': '',/*insert the state here*/
        'country': ''/*insert the country here*/
      },bubbles: true,cancelable: true});
  /*NOTE: it is not important how many details you enter, only the values will be submitted in the same order.*/
  $('.cf7-google-map-container').trigger(event);
}

6. ¿Cómo puedo personalizar la visualización de la dirección en el correo de aviso?

si incluyes la etiqueta de dirección de correo [dirección-] en el cuerpo del correo de aviso, se mostrará por defecto con cada campo en una nueva línea. Si necesitas cambiar esto, engancha el siguiente filtro,

add_filter('cf7_google_map_mailtag_address', 'change_address_format',10,3);
function change_address_format($formatted_address, $address, $field){
  if('my-location'==$field){ //make sure you're handling the right form field.
    $formatted_address=implode(', ',$address);
  }
  return $formatted_address;
}

7. ¿Puedo cambiar los ajustes por defecto del mapa?

sí, puedes usar el siguiente gancho para filtrar el tipo de mapa (establecido en ROADMAP por defecto),

add_filter('cf7_google_map_default_type', 'change_map_type', 10,2);
function change_map_type($type, $field){
  //type must be either ROADMAP/SATELLITE/TERRAIN/HYBRID.
  if('your-location' ==$field) $type = 'SATELLITE';
  return $type;
}

puedes desactivar/activar los controles del mapa,

add_filter('cf7_google_map_settings', 'use_custom_map_settings',10,2);
function use_custom_map_icon($settings, $field_name){
  if( 'your-location' == $field_name ){
    $settings['mapTypeControl']= false; //hide (true by default).
    $settings['navigationControl']= false; //hide (true by default).
    $settings['streetViewControl']= false; //hide (true by default).
    $settings['zoomControl']=false; //hide (false by default).
    $settings['rotateControl']=true; //show (false by default).
    $settings['fullscreenControl']=true; //show (false by default).
    $settings['rotateControl']= true; //show (false by default).
    $settings['zoom']= 12; //set by default to the value initialised at the time of creating the form tag.
    $settings['center'] = array('11.936825', '79.834278'); //set by default to the value initialised at the time of creating the form tag.

  }
  return $settings;
}

puedes filtrar los ajustes del marcador del mapa,

add_filter('cf7_google_map_marker_settings', 'use_custom_marker_settings',10,2);
function use_custom_marker_settings($settings, $field_name){
  if( 'your-location' == $field_name ){
    $settings['icon'] = ... //set your image url here.
    $settings['draggable'] = false; //true by default.
    $settings['position'] = array('11.936825', '79.834278'); //set by default to the value initialised at the time of creating the form tag.

  }
  return $settings;
}

9. ¿Puedo traducir las etiquetas de los campos de mi dirección?

Si estás usando los campos de dirección integrados brindados por el plugin, puedes cambiar las etiquetas de los campos utilizando los siguientes ganchos:

add_filter('cf7_google_map_address_label', 'change_address_label',10,2)
function change_address_label($label, $field_name){
  if('your-location'==$field_name){
    $label = 'Adresse';
  }
  return $label;
}
add_filter('cf7_google_map_city_label', 'change_city_label',10,2)
function change_city_label($label, $field_name){
  if('your-location'==$field_name){
    $label = 'Ville';
  }
  return $label;
}
add_filter('cf7_google_map_pincode_label', 'change_pincode_label',10,2)
function change_pincode_label($label, $field_name){
  if('your-location'==$field_name){
    $label = 'Code postal';
  }
  return $label;
}
add_filter('cf7_google_map_country_label', 'change_country_label',10,2)
function change_country_label($label, $field_name){
  if('your-location'==$field_name){
    $label = 'Pays'
  }
  return $label;
}

10. ¿Es posible interactuar con el mapa y vincular cambios de eventos?

A partir de la versión 1.6, es posible interactuar con el objeto de la biblioteca gmap3 una vez inicializado, cada vez que un usuario arrastra el marcador, o si activas la API de geocodificación, para vincular las actualizaciones de direcciones cuando se selecciona un nuevo resultado de búsqueda.

Puedes obtener ejemplos de fragmentos de código de JavaScript si usas la extensión Smart Grid que tiene un editor de interfaz de usuario de cuadrícula con atajos de código para ahorrar tiempo en el desarrollo (consulta la Captura de pantalla n.° 17 en la página del plugin); de lo contrario, puedes vincular los siguientes eventos:

$('.cf7-google-map-container').on('init.cf7-google-map drag.cf7-google-map update.cf7-google-map', function(e){
  //event e contains various object references. e.gm3 for the gmap3 object, e.marker, e.gmap are the google marker and map respectively.
  //so to set a circle around the marker...
  e.gm3.circle({
    center: [e.marker.position.lat(),e.marker.position.lng()],
    radius : 750,
    fillColor : '#b0b14eb1',
    strokeColor : '#fff100ff'
  });

});

11. ¿Cuáles son los eventos de JavaScript expuestos?

A partir de la versión 1.8, además de activarse los objetos de eventos jQuery, también se activan eventos simples de JavaScript,
Todos los eventos se activan en el contenedor del mapa .cf7-google-map-container

eventos jQuery:

init.cf7-google-map
drag.cf7-google-map
update.cf7-google-map

el evento init se activa al inicializar un mapa y expone

  • gm3 objeto gmap3,
  • gmap Objeto del mapa de Google,
  • marker el objeto marcador de Google que se ha actualizado.
  • settings.center las coordenadas del centro del mapa como un array con [lat,lng]
  • settings.zoom el nivel de zoom del mapa.
  • settings.type el tipo de mapa usado,
  • settings.marker las coordenadas del marcador actual como una matriz [lat,lng]

el evento de arrastre se activa cuando se arrastra un marcador en el mapa, expone,

  • settings.center las coordenadas del centro del mapa como un array con [lat,lng]
  • settings.zoom el nivel de zoom del mapa.
  • settings.type el tipo de mapa usado,
  • settings.marker las coordenadas del marcador actual como una matriz [lat,lng]

el evento de actualización se activa y luego se cambia el marcador en el mapa (cuando el campo de búsqueda se usa para ubicar automáticamente un resultado), se expone,

  • gm3 objeto gmap3,
  • gmap Objeto del mapa de Google,
  • marker el objeto marcador de Google que se ha actualizado.
  • address la dirección de la ubicación del marcador,

**Eventos equivalentes de JavaScript **

init/cf7-google-map
drag/cf7-google-map
update/cf7-google-map

Sin embargo, ten en cuenta que en los eventos de JavaScript, los objetos del mapa se encuentran en la propiedad event.detail, mientras que en el objeto de evento jQuery estos se exponen directamente en la raíz del objeto del evento.

12. ¿Cómo puedo aplazar la inicialización de un mapa?

Para activar mediante programación una inicialización de mapa, primero debes desactivar la inicialización automática usando el filtro,

add_filter( 'cf7_google_map_initialise_on_document_ready','your_location_stop_initialise',10,2);
/**
* Filter initialisation on document ready event.
* You can stop the automatic intialisation should you want to control the process on a separate popup.
* @param Boolean $do_init weather to initialise or not, true by default.
* @param String $field the field name being populated.
*/
function your_location_stop_initialise($do_init, $field){
  if( 'your-location' !== $field) return $do_init; //check if this is the right map field.
  return false;
}

en la parte pública de la web necesitas disparar el evento initialise-cf7-gmap en el contenedor del mapa,

$(document).ready(function(){
  //assuming your field is 'your-location'
  $('.cf7-google-map-container.your-location').trigger('initialise-cf7-gmap');
})

Reseñas

18 de enero de 2021 1 respuesta
This is a very nice plugin. Support is fast and good. Very happy with the result.
16 de agosto de 2020 1 respuesta
It does exactly what it claims. Also the support is super fast!
29 de junio de 2020 1 respuesta
Thank you for this plugin. Looking for a gmap plugin that worked with my theme and CF7 and this fit the bill. While I’m irked that google needs a billing information for access to a maps api key (although they give a «credit» every month of $200) and I’m never going to max out that charge, the plugin itself does exactly what I need (search for a location and drop a marker on the that spot, and then retrieve the coordinates for CF7 delivery) exactly and without fluff. The plugin owner responded to a bug request within hours with a fix and a deployment of that update. That should get another 5 stars.
Leer todas las 15 reseñas

Colaboradores y desarrolladores

«Extensión de Contact Form 7 para campos de Google Map» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«Extensión de Contact Form 7 para campos de Google Map» está traducido en 1 idioma. Gracias a los traductores por sus contribuciones.

Traduce «Extensión de Contact Form 7 para campos de Google Map» a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios

1.9.0

  • js/css minimizado para sitios activos.
  • se corrigieron problemas con el evento para mapas repetitivos.

1.8.4

  • corregir campos repetitivos.
  • corregir la seguridad del código.

1.8.3

  • corregir el seguimiento de las opciones de aviso del administrador.

1.8.2

  • corregir la barra de búsqueda de inicio de múltiples mapas.
  • corregir el cambio de tamaño de la barra de búsqueda.

1.8.1

  • corregir el conflicto de nombres del geocodificador.

1.8.0

  • se corrigieron problemas de jquery 3 con la barra de búsqueda.
  • filtro añadido «cf7_google_map_initialise_on_document_ready»
  • activar el control basado en eventos de la inicialización del mapa para formularios de ventanas emergentes.

1.7.3

  • corregir campos de mapas múltiples/formularios múltiples en una sola página/compatibilidad con Post My CF7 Form .
  • activar campos de mapa repetitivos en Smart Grid.

1.7.2

  • corregir los campos de dirección.

1.7.1

  • corregir el fallo del marcador en el evento js udpate.

1.7.0

  • corregir mapa requerido mostrar mensaje.
  • activar múltiples campos de mapa en una página/formulario.

1.6.0

  • exponer objetos del mapa js en el lado del cliente con eventos.
  • mejor integración con el plugin del editor de interfaz de usuario CF7 Smart Grid.
    =1.5.0=
  • mueve el script principal de Google js a un archivo separado.
  • actualiza js a ES6.
  • añade el filtro cf7_google_map_marker_settings.
  • añade el filtro cf7_google_map_settings.
    =1.4.5=
  • corregir la búsqueda.
  • corregir enlaces de ajustes.
  • corregir la posición del botón de búsqueda.
    =1.4.4=
  • corregir el filtro ROADMAP.
    =1.4.3=
  • corregir el marcado del campo del mapa HTML.
  • ajustes actualizados para mejorar el ajuste de la clave API.
  • corregir error fatal en el campo de dirección.
  • corregir errores en las etiquetas de correo.
    =1.4.2=
  • ajusta el campo de dirección enviada para los datos publicados en cf7.
    =1.4.1=
  • corrige el fallo de la bandera booleana en mapas sin campos de dirección.
    =1.4.0=
  • añade campos de dirección personalizados.
  • capturar el centro del mapa al cambiar la ampliación en la página de administrador.
  • comprueba en la página de administrador si post_type está establecido.
  • se añadieron FAQ para recuperar lat/lng.
  • se añadieron FAQ para completar campos de dirección personalizados.
    =1.3.2=
  • corregir el error de resultados del cuadro de búsqueda.
    =1.3.1=
  • corrección de fallos en el esquema de URL.
    =1.3.0=
  • ajustes para la API de codificación geográfica y la API de Google Places.
  • faq actualizada con más información.
  • los marcadores de lugares del cuadro de búsqueda ahora se pueden arrastrar.
  • el cuadro de búsqueda coloca el marcador y borra la ubicación por defecto del marcador.
    =1.2.6=
  • corregir el fallo del campo de dirección opcional.
  • se corrigió que el mapa no se mostrara para los formularios estándar CF7.
    =1.2.5=
  • corrige la advertencia constante WP_GURUS_DEBUG.
    =1.2.4=
  • compatible con plugin en modo avión.
    =1.2.3=
  • corrección de fallo: Mensaje de error de validación
    =1.2.2=
  • corrección de fallo: Centro del mapa al arrastrar.
    =1.2.1=
  • corrección de errores al subir mapas de formularios de borrador existentes.

1.2

  • activar la carga de coordenadas del mapa en formularios de borrador guardados.
  • las entradas del mapa no se vacían cuando se guarda el borrador del formulario usando el plugin Post My CF7 Form.
  • corrección de fallos al guardar los detalles del mapa mediante el plugin Post My CF7 Form.

1.1

  • campo de búsqueda añadido
  • se añadieron campos de dirección opcionales con codificación geográfica inversa.

1.0

  • primera versión, sólo en idioma inglés