Gravity Forms permite el rellenado de campos de forma predeterminada, es decir, permite establecer un valor a un campo antes de que el usuario lo haya rellenado. Esto, aparte de ser muy útil en muchas situaciones, permite ofrecer una mejor experiencia de usuario.
Y hay varias formas de rellenar campos dinámicamente en Gravity Forms, ya que puede hacerse mediante un shortcode, un enlace o, incluso, mediante hooks, lo que permite una libertad casi absoluta a la hora de generar el valor de un campo.
Tabla de contenidos
Prerrellenado de campos en Gravity Forms
¿Por qué hacer que tu cliente, que ya tiene cuenta de usuario en la web, rellene su nombre y su email cada vez que va a enviarte un formulario? ¿Acaso no tienes ya sus datos? O ¿para qué hacer varios formularios similares para diferentes usos, si puedes añadir un campo oculto que se rellene dinámicamente con la información que los diferencia?
Lo cierto es que cuando empiezas a usar el rellenado dinámico en Gravity Forms, empiezas a darte cuenta de todo el potencial que tiene esta funcionalidad, y es cuando te preguntas cómo habías podido vivir sin ella hasta entonces. 🙂
Hasta aquí he hablado indistintamente de valor predeterminado de un campo y rellenar campo dinámicamente, pero no son la misma cosa. Ambas funcionalidades permiten darlo un valor a un campo en el momento de imprimirlo en pantalla, pero de diferente forma.
Valor predeterminado de un campo
El valor predeterminado permite que Gravity Forms rellene el campo por nosotros (y por el usuario) con algunos datos que ya conoce, como la fecha, el nombre de usuario, el email, la IP… Esto nos permite utilizarlo de dos formas muy diferentes, que se ven muy bien con dos ejemplos muy concretos:
- Para mejorar la experiencia de usuario, haces que el campo email ya aparezca relleno en el formulario de contacto con el correo electrónico cuando el cliente tiene cuenta en tu web
- Para tus propias estadísticas, insertas el user agent (identificador del navegador, sistema operativo e idioma utilizados por el usuario) en un campo oculto (ojo, que si haces algo así tienes que informar al usuario de que estás recabando esos datos)
Esta es una funcionalidad que ya incluyen los campos de Gravity Forms, y que incluye alrededor de una decena de datos: fecha (con dos formatos diferentes), dirección IP del usuario, user agent, ID, título o URL de la entrada o página en la que está el formulario, nombre de usuario, nombre para mostrar (nicename), dirección de email…
Configurarlo es tan sencillo como ir a la pestaña Avanzado del campo en cuestión y seleccionar el dato que queramos usar en el desplegable del campo Valor predeterminado. Nada más fácil.
¿Estás construyendo tu tienda online o eres implementador WordPress?
¿Necesitas plugins de calidad y con soporte para implementar funcionalidades concretas?
Consigue todos los plugins a la venta en la sección de plugins de esta web y todos los que siga añadiendo. Acceso a los 96 plugins (y subiendo) con soporte directo del desarrollador, actualizaciones y uso ilimitado: úsalos en tantas webs como lo necesites.
Rellenar un campo dinámicamente en Gravity Forms
Ya has visto qué sencillo es aplicar a un campo un valor predeterminado… y también qué limitado: sólo puedes contar con los datos preestablecidos por Gravity Forms.
Sin embargo, para necesidades más complejas el plugin nos ofrece otra funcionalidad: el rellenado de campos dinámico. Ya hablé de esta funcionalidad al hablar de cómo pasar datos entre formularios con Gravity Forms, y es que para ello usamos el rellenado dinámico a través de la URL, una de las formas posibles de hacerlo:
Pero en realidad se puede hacer de otras formas. A ver si consigo explicar bien cada una de ellas, y si me puedo ayudar de algún ejemplo, mejor que mejor.
En cualquier caso, la base es la misma de las tres formas posibles: marcar el campo como dinámico (en la pestaña Avanzado, marcar la opción Permitir al campo rellenarse dinámicamente) y darle un nombre al parámetro que utilizaremos para identificar su valor:
Campos dinámicos mediante el shortcode
El propio shortcode que incrusta el formulario permite dar el valor de uno (o varios) campos. Esto es muy útil para poder utilizar un sólo formulario para cosas muy similares. Un ejemplo.
Imagina que organizas varios eventos, y que para la confirmación de asistencia (o para pedir información sobre los mismos, o para lo que sea) utilizas un formulario de Gravity Forms. Todos los campos son siempre los mismos (nombre, email, mensaje, confirmación de asistencia, etc) pero cambia el evento, y los promocionas en diferentes entradas del blog. ¿Haces un formulario para cada evento? ¡Error!
Lo más eficiente en un caso así sería incluir un campo oculto llamado «evento» (o como te dé la gana) y hacer que se rellene dinámicamente mediante el shortcode, de forma que establezcas su valor en función de para qué evento habilites el formulario. Por ejemplo:
[gravityforms id=1 field_values='evento=Concierto benéfico']
Al tratarse de un campo puedes después utilizar ese valor para crear el asunto de los correos electrónicos de notificación o incluso para realizar decisiones condicionales, tal y como explicaba en esta otra entrada (requiere saber PHP):
Campos dinámicos mediante enlace
La segunda forma de hacerlo es mediante la URL, es decir, construyendo un enlace especial que apunte a la página donde está el formulario y que ya incluya el valor del parámetro. Esto puede ser útil de varias formas; una de ellas es para, como mencionaba antes, para pasar datos de un formulario a otro:
Otro ejemplo muy útil es, si estás mandando usuarios desde las redes sociales, para saber desde cuál de ellas ha llegado cada uno de los usuarios que ha enviado el formulario. Para eso puedes crear un campo dinámico identificado por el parámetro «red_social» (o como más te guste llamarlo), y después compartir en redes los enlaces cambiando el valor del parámetro:
https://tuweb.com/post-con-formulario?red_social=facebook https://tuweb.com/post-con-formulario?red_social=twitter https://tuweb.com/post-con-formulario?red_social=pinterest
Por supuesto, puedes usar un acortador de URLs para que no se vea el parámetro, que queda feo. 🙂
Prerellenar campos dinámicos mediante un hook
El último método que queda por ver es el más complejo (requiere programación en PHP y conocimientos de la API de WordPress) pero es sin duda el más flexible y potente: rellenar el campo mediante un hook.
Para eso Gravity Forms dispone de un filtro dinámicamente generado: gform_field_value_{nombre_parametro}. Es decir, se puede marcar un campo como dinámico, asociarle el parámetro, por ejemplo, ciudad_cliente, y después asignarle un valor utilizando el filtro gform_field_value_ciudad_cliente.
De nuevo, lo más fácil será ver el ejemplo con código real. Has creado un formulario en el que se piden diversos datos, pero por supuesto no quieres que los clientes que tengan ya cuenta en tu tienda tengan que ponerlos: ¡tú ya tienes esa información!
Gravity Forms ya nos permite, como vimos al principio, mostrar los campos de nombre de usuario y correo electrónico con sus valores correspondientes, gracias a los marcadores para valores predeterminados, pero el resto de datos (entre ellos la ciudad) no están disponibles. Pues bien, crearemos nuestro filtro gform_field_value_ciudad_cliente, que será tan sencillo como esto:
add_filter( 'gform_field_value_ciudad_cliente', function ( $valor ) { $cliente = new WC_Customer( get_current_user_id() ); return $cliente->get_billing_city(); }, 10, 1 );
Por supuesto, podemos crear tantos como necesitemos:
add_filter( 'gform_field_value_telefono', function ( $valor ) { $cliente = new WC_Customer( get_current_user_id() ); return $cliente->get_billing_phone(); }, 10, 1 );
Y listo. Mientras que el resto de los mortales tendrán que rellenar los datos, nuestros clientes se encontrarán el formulario ya relleno con sus datos, gracias a los campos dinámicos de Gravity Forms. 🙂
Rafa Orts dice
Hola Enrique, verás estoy buscando algo que no estoy muy seguro si se puede hacer con GF. Se trata de crear un campo, por ejemplo llamado «Número de Usuarios» y que cuando el usuario indique el Número de Usuarios «1, 2, 3, 4, 5, etc…» en la siguiente etapa se muestren tantos campos de Texto como Usuarios haya indicado el cliente. No se si me explico.
Ejemplo:
¿Número de Usuarios?
6
– Entonces Aparecen 6 Campos de Texto para rellenar-
1. ______________________ 2. ___________________ 3._____________________ etc. hasta 6.
Si en lugar de 6 el usuario indica 2.
1. ______________________ 2. ___________________
Y así.
Gracias por la ayuda prestada. Un saludo.
Enrique J. Ros dice
Hola Rafa
No hay una forma sencilla de hacer eso directamente con GF, pero se puede programar un script (JavaScript) que lo permita: bastaría crear el número máximo de campos necesarios (seis en tu ejemplo), todos ocultos por defecto, y mostrar el número necesario en función del número de usuario usando style.display o el método .fadeIn() de jQuery.
Un saludo,
Víctor Galindo dice
Hola Rafa,
Hace tiempo que dejé de utilizar GF porque se me quedaba cojo en muchos aspectos que necesitaba. Te recomiendo utilizar «Formidable Forms» (no tengo nada que ver con ellos a excepción de que soy cliente). Se puede hacer todo lo que hace GF y muchas cosas más. De verdad, es increíble.
Lo que necesitas se puede hacer de forma muy sencilla con Formidable Forms. Simplemente tienes que crear tantos campos de texto como número de usuarios muestres en el campo «Número de Usuarios» y aplicar a estos campos de texto lógicas condicionales (es muy sencillo y sin código).
Por ejemplo:
– Al campo de «Texto1» le aplicas la condicional que únicamente se muestre si en el campo «Número de Usuarios» se ha seleccionado un valor.
– Al campo de «Texto2» le aplicas la condicional que únicamente se muestre si en el campo «Número de Usuarios» se ha seleccionado un valor mayor de 1.
– Al campo de «Texto3» le aplicas la condicional que únicamente se muestre si en el campo «Número de Usuarios» se ha seleccionado un valor mayor de 2.
– Al campo de «Texto4» le aplicas la condicional que únicamente se muestre si en el campo «Número de Usuarios» se ha seleccionado un valor mayor de 3.
– Al campo de «Texto5» le aplicas la condicional que únicamente se muestre si en el campo «Número de Usuarios» se ha seleccionado un valor mayor de 4.
– etc…
Saludos
Manuel dice
Saludos Enrique,
Llevo varios dias intentado hacer lo siguinte con GF, lo que necesito es tener un campo desplegable con los nombres de usuarios y dependiendo del usuario seleccionado se le envie el formulario a su email. Lo explico con un ejemplo por si no he conseguido trasmitir mi idea » Selecciono Usuario 001, el cual debe tener asociado un email, cuando le pinche en el boton enviar el formulario debe ser enviado a este email». Se que en notificaciones se puede hacer, pero mi otra pregunta es ¿cual es el maximo de email que puedo añadir en notificaciones?, ya que voy a manejar un listado grande de direcciones de email. ¿Existe alguna forma que desde una lista como ocurre con los campos List donde estan los paises/cuidades etc… pueda insertar todos los emails?. Gracias y espero haberme hecho enteder. Manuel
Enrique J. Ros dice
Hola Manuel
Si los pones en notificaciones, le llegará notificación a todos ellos. Si son usuarios registrados en la web puedes incluir un campo dinámico (oculto si es necesario) que se rellene automáticamente no el email del usuario y después usarlo para enviar la notificación. Si no es así entonces el asunto ya requiere programación personalizada, filtrando el envío del formulario y asociando con PHP el email correspondiente a un campo administrativo, algo similar a lo que explico en este artículo.
Un saludo.
Carla Mannino dice
Hola Enrique, espero que estes muy bien!
Estoy intentando configurar un campo que funcione como número de orden y se genere automáticamente, sin que el cliente lo vea, pero me llegue en el mail de notificación. Simplemente no encuentro una función de este estilo dentro de las opciones de campos de formulario, hay algún modo de hacerlo de forma sencilla?
Muchas gracias!
Enrique J. Ros dice
Hola Carla
Puedes hacerlo mediante un hook, tal y como explico en el último apartado del artículo, marcando el campo como campo de administración (para que no se muestre) y generando el número de orden con PHP, bien de forma aleatoria con rand() o, si necesitas que sea secuencial, accediendo a la base de datos para recuperar el último utilizado y guardar el nuevo.
Un saludo,
david dice
Buenos días,
Gracias de antemano por la información. Tengo una consulta acerca del límite de entradas:
Este plugin permite limitarlas, pero en mi caso, el formulario incluye un campo destinado a que el usuario diga cuantas personas van a asistir al evento; es decir, que si ha habido 40 entradas, pero cada usuario ha elegido que va a ir acompañado, por ejemplo, de otra persona (2 en total), mi formulario no se cerrará hasta que se hayan inscrito 80, el doble de la capacidad de mi evento.
¿Cómo puedo sumar los valores del campo del formulario ‘asistentes’ para que cuando lleguen a un determinado número el formulario quede cerrado?
Un saludo
Richard Medina dice
Buenas Enrique, fijate necesito comparar dos valores en GF para mostrar el mayor, claro los dos campos que contienen los valores son calculos internos productos de otros valores introducidos es decir :
valor1=10 ==> valores indicados por el usuario
valor2=3 ==> valores indicados por el usuario
campocomparar1=valor1+valor2*2.5 ===>Calculo
campocomparar2=valor1+valor2/5*2.5 ===>Calculo
si campocomparar1>campocomparar2 muestra X de lo contrario muestra Y
Enrique J. Ros dice
Hola de nuevo Richard
Ya te contesté en el otro comentario que hiciste igual a este, aquí.
Un saludo
roy dice
Hola Enrique
Gracias por compartir tus conocimientos y generar contenido original. Me pregunto como puedo en GF poder acceder a los datos que envían en cada formulario. Por ejemplo si quisiera hacer dos nubes de palabras , asociadas a dos formularios distintos. Me planteo algo sencillo con un formulario de un solo campo tipo texto, para facilitar la comprensión.
Saludos
Enrique J. Ros dice
Hola Roy
Eso depende de si quieres acceder al momento de enviarlos, es decir, filtrarlos (por ejemplo para procesar y almacenar ese texto), o si lo que quieres es acceder a las entradas (es decir, los formularios ya enviados y guardados).
Si lo que necesitas es filtrarlos, explico cómo hacerlo en esta entrada.
Un saludo.
roy dice
Garcias por tu pronta respuesta pero me refería a las entradas ya enviadas. Es decir si tengo dos formularios tendré dos tablas asociadas respectivamente. Y siguiendo el ejemplo anterior, como puedo acceder a los datos, por ejemplo acceder a todos los datos enviados desde el campo 1 del formulario 1. Perdona por no explicarme bien anteriormente.
Muchas gracias
Enrique J. Ros dice
Para eso tienes que recuperar el contenido de cada entrada (cada formulario enviado) en la base de datos. Aquí puedes ver la estructura de las tablas para ello.
Un saludo.
roy dice
Muchísimas gracias!
Alberto dice
Hola Enrique,
Muchas gracias lo primero por lo q aportas. Mi consulta es q quiero rellenar automáticamente el campo hora de envío del formulario y no soy capaz. El campo de fecha si lo tengo peeo con la era no veo la opción.
Muchas gracias!!!
Enrique J. Ros dice
Hola Alberto
En este caso habría que hacerlo mediante código, usando un hook como explico al final de la entrada.
Un saludo.
Montse dice
Hola Enrique!
Gracias por tu información, ha sido de gran ayuda. Hay alguna posibilidad de crear un condicional en GF que solo muestre otro campo si por ejemplo en un multiple choice seleccionan dos valores y si selecciona uno no se muestre?
y, por otro lado, un condicional que solo te permita seleccionar como máximo dos en el multiple choice?
Muchas gracias!
Enrique J. Ros dice
Hola Montse
Sí, es posible pero hay que programarlo en JavaScript, no se puede actuar sobre los campos en tiempo real de otra manera.
Un saludo.
Mario Molina dice
Hola Enrique buenos días, tengo una consulta…
Estoy usuando Gravity Forms y varios de sus adons, ya he conseguido que un prospecto se registre en mi página, y mediante gravitywiz logre que se le generara in ID (la página es para un casillero virtual y se usa este número como número de casillero).
Sin embargo, lo que necesito ahora es que una vez el usuario ingrese a la página mediante “su usuario y contraseña” pueda ver su nombre y número de ID reflejado en la página de bienvenida.
De antemano Muchas gracias por la ayuda.
Enrique J. Ros dice
Hola Mario
Echa un vistazo a esta entrada, te servirá de ayuda para eso.
Un saludo.
Sergio dice
Hola Enrique,
Muchas gracias por tus post.
Estoy intentando rellenar el campo cantidad con el resultado de un calculo en el formulario de gravity forms, pero no doy con ello. ¿Me decir como se puede hacer?
Gracias
Enrique J. Ros dice
Hola Sergio
Es muy sencillo, echa un vistazo a la documentación de Gravity Forms al respecto
Un saludo
Hector dice
Hola Enrique, espero que estés muy bien!
Espero puedas ayudarme, yo soy de México he visto muchas web que al llenar un formulario que lleva una dirección el primer campo que piden es el código postal al llenar este , muchos campos de la dirección se llenan automáticamente como el estado, la colonia, etc.
¿Esto se puede hacer con GF? Ya me he descargado de la pagina del servicio postal de mexicano la lista de códigos postales con colonia.
Ya que mi proyecto es algo local, solo seria necesario que al poner el código postal, al usuario le aparecieran en el campo «colonia» las colonias que están en ese CP y la seleccione en una lista desplegable.
No se si me explique, ¿puedo lograr esto con GF?
Enrique J. Ros dice
Hola Héctor
Puedes hacerlo utilizando el add-on Gravity Forms Chained Selects.
Un saludo
Victor López dice
Hola Enrique,
Muchas gracias por tu tutorial, pero no se como puedo gestionar el hacer un formulario que coja de forma dinámica los datos creados de un cpt con jetengine, oséa listar sus servicios para que el cliente pueda modificar sus precios o añadir alguno nuevo.
Sabes orientarme sobre como puedo hacerlo?
Muchas gracias.
Iván dice
Estoy buscando que el número celular se llene dinámicamente y leí la opción por medio de Hook, pero estoy entendiendo poco esa explicación, el código tengo que agregarloa fuctions.php?
Después de eso donde pongo cual sería el «código corto» y en que parte de gravityforms lo debo poner?
Por favor
Enrique J. Ros dice
Hola Iván
Echa un vistazo a esto, te será de ayuda.
Un saludo
Cristóbal Villaseñor Galván dice
Buenos días Enrique,
Estoy utilizando CPT UI para generar un tipo de entrada especifico (tipo directorio) con campos personalizados en ACF (Por ejemplo, Nombre, Edad, Sexo, Dirección)… Utilizo Gravity Forms para generar varios tipos de instrumentos, he logrado utilizar UN campo desplegable en mis formularios que enlista los nombre esas entradas utilizando un plugin (Gravity Forms + Custom Post Types). Pero quiero lograr que al seleccionar este campo (Nombre), los demás campos (Edad, Sexo, Dirección) se llenen dinámicamente con la información que contiene la entrada seleccionada.
¿Algún consejo?
Eudald Rota Serra dice
Hola Enrique,
Gracias por tus aportes en el blog.
Estoy intentando rellenar un campo dinámicamente con la información introducida previamente en otro campo del mismo formulario ¿es esto posible?
No sé si la solución es hacerlo mediante un hook o mediante algún otro tipo de código.
Un saludo, gracias.
Enrique J. Ros dice
Hola Eudald
Tendrías que programarlo a medida con JavaScript.
Un saludo
Eudald Rota Serra dice
Hola Enrique,
Gracias por tu respuesta.
Un saludo
Juan Bartolo dice
Hola Enrique, donde inscrusto el codigo del hook? Cual archivo me serviria para esto?
Saludos
Juan Bartolo dice
Hola Enrique, donde incrusto el código del hook? Cual archivo me serviría para esto?
Saludos