Enrique J. Ros

Campos dinámicos y valores predeterminados en Gravity Forms

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.

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:

  1. 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
  2. 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.

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. 🙂

Salir de la versión móvil