Ya he dicho muchas veces que Gravity Forms es el plugin para formularios más completo y potente que existe en el ecosistema WordPress, permitiendo crear desde simples formularios de contacto hasta complejísimos formularios con lógica condicional, paginación, pagos…
Y, precisamente para la funcionalidad de pagos, Gravity Forms es capaz de manejar divisas. Pero ocurre que no tiene configuradas por defecto todas las que existen (ni mucho menos). Así que vamos a ver cómo añadir y configurar nuevas monedas en Gravity Forms.
Tabla de contenidos
Las divisas en Gravity Forms
Decía que no están incluidas todas las que existen (puedes verlas en Formularios > Ajustes > Moneda), pero es que de hecho de entre todas las monedas usadas en América Central y Sudamérica sólo está incluido el real brasileño, lo que deja fuera a una gran cantidad del mercado hispanohablante.
Es algo a tener en cuenta, considerando que entre las funcionalidades avanzadas de Gravity Forms (muy difícil de encontrar en plugins de formularios) están el cálculo de precios e incluso el procesamiento de pagos, como ya vimos cuando hablaba sobre cómo generar dinámicamente la cantidad para un pago a través de Redsys con Gravity Forms, cómo integrarlo con Stripe, cómo usarlo para agrupar productos variables en WooCommerce o cómo crear presupuestos automáticos.
El filtro gform_currencies
Todas estas funciones requieren el manejo de precios (o, más ampliamente, de cantidades monetarias, que no es exactamente lo mismo). Y, cuando el plugin no incluye la moneda que utilizan mayoritariamente tus clientes, de poco sirve.
Afortunadamente Gravity Forms lo que se llama developer-friendly, que en el mundo WordPress viene a significar que incluye acciones y filtros para un gran número de operaciones y funcionalidades.
Entre ellos incluye el filtro gform_currencies que es el que nos va a permitir hacer literalmente lo que nos dé la gana (modificar, añadir, eliminar) con las monedas que el plugin es capaz de manejar.
Modificar las monedas por defecto en Gravity Forms
El uso más sencillo sería el de modificar la configuración de las monedas que incluye. Por ejemplo, podemos querer mostrar el precio con el símbolo del euro antes de la cantidad, no después como Gravity Forms lo pone por defecto. O quizá hacer que aparezca pegado al número y no separado por un espacio.
Todo esto lo podemos hacer gracias a que ese filtro nos proporciona un array con las monedas que Gravity Forms puede manejar, y sus configuraciones. No te preocupes si ni siquiera sabes lo que es un array: lo vamos a ver con ejemplos y explicaciones. Por ejemplo, el elemento del array (que es en sí mismo otro array) que proporciona la información para el euro es, por defecto, así:
$monedas['EUR'] = array( 'name' => 'Euro', 'symbol_left' => '', 'symbol_right' => '€', 'symbol_padding' => ' ', 'thousand_separator' => '.', 'decimal_separator' => ',', 'decimals' => 2, );
Lo que quiere decir que:
- El nombre de la moneda es Euro
- Está representada por el símbolo € a la derecha de la cantidad, y ningún símbolo a la izquierda de ésta
- Hay un espacio entre la cantidad y el símbolo de la moneda
- El separador de miles es el punto
- El separador de decimales es la coma
- Se utilizan dos decimales (para los céntimos)
Y claro, aquí ya vas viendo las posibilidades, ¿verdad? Y es que el filtro nos deja hacer con esos valores lo que queramos, y devolvérselos cambiados (o, incluso, no devolvérselos en absoluto). Por ejemplo, podría hacer un unset( $monedas[‘EUR’] ); antes del return y Gravity Forms se «olvidaría» de la existencia del euro.
Así, si quiero que Gravity Forms muestre el símbolo del euro a la izquierda (en lugar de a la derecha) y sin espacio, usaré el filtro de esta forma:
add_filter( 'gform_currencies', function( $monedas ) { $monedas['EUR'] = array( 'symbol_left' => '€', 'symbol_right' => '', 'symbol_padding' => '', ); return $monedas; }, 10, 1 );
No es necesario volver a especificar los valores que no deseamos cambiar. También podemos hacerlo valor por valor, de esta otra forma:
add_filter( 'gform_currencies', function( $monedas ) { $monedas['EUR']['symbol_left'] = '€'; $monedas['EUR']['symbol_right'] = ''; $monedas['EUR']['symbol_padding'] = ''; ); return $monedas; }, 10, 1 );
O, aún más, si no quiero permitir el uso de céntimos sino sólo cantidades exactas (ojo, estamos hablando de la configuración general de Gravity Forms, y no de un formulario concreto) podría hacer lo siguiente:
add_filter( 'gform_currencies', function( $monedas ) { $monedas['EUR']['decimals'] = 0; ); return $monedas; }, 10, 1 );
Añadir nuevas monedas a Gravity Forms
Pero sin duda lo más interesante para millones de usuarios es la capacidad que esto proporciona de añadir nuevas monedas que no estén incluidas por defecto en la configuración del plugin. El peso colombiano, chileno o argentino, el bolívar, el sol, el colón… (perdón por las que me dejo en el tintero).
Y, con lo que hemos visto, ya te habrás dado cuenta de que hacer esto es sencillísimo: basta con añadir al array filtrado en nuevo elemento (que, de nuevo, es en sí mismo otro array) con la configuración de esa moneda. Si además quitamos las que no vamos a usar en la instalación (menos bulto, más claridad, como decimos en mi tierra) podemos incluso conseguir algo así:
Añadir a Gravity Forms el peso colombiano
Sé que con lo dicho ya sabrás hacerlo, pero por completar la información y por no alargar el asunto, voy a poner un ejemplo concreto sobre cómo añadir una moneda específica a la configuración de Gravity Forms: el peso colombiano.
Basta con añadir un nuevo elemento al array que obtenemos con todas las monedas (el elemento ‘COP’) con la configuración adecuada: símbolo, separadores, etcétera, en este caso sin decimales porque, si no me equivoco, el peso colombiano no se fracciona en centavos. Así:
add_filter( 'gform_currencies', function( $monedas ) { $monedas['COP'] = array( 'name' => 'Peso colombiano', 'symbol_left' => '$', 'symbol_right' => '', 'symbol_padding' => ' ', 'thousand_separator' => '.', 'decimal_separator' => ',', 'decimals' => 0, ); return $monedas; }, 10, 1 );
Y listo, ya está. Desde ese momento Gravity Forms ya es capaz de manejar el peso colombiano como moneda: puedes seleccionarla en los ajustes del plugin y ya la utilizará en cualquier formulario que incluya campos numéricos con formato de moneda.