Filtro de validación personalizado de Gravity Forms

2 minutos de lectura

avatar de usuario
Nietzsche

Tengo una función que procesa las ventas a través de un servicio de terceros, procesa el resultado y devuelve una matriz con el estado “Éxito” o “No válido”. Esta llamada de ventas se realiza utilizando el enlace gform_after_submission aplicado al formulario específico.

Lo que debo hacer es almacenar el resultado “Éxito” o “No válido” en la matriz como una variable que luego puedo pasar a una función para validar o invalidar el campo de la tarjeta de crédito, usando el gancho gform_validation.

Estoy declarando la variable en una función, así:

function foo { 
...code to sell product through API...

$status = $checkoutShoppingCartRequest['Result']['Status'];
}

Cuando imprimo la variable $status dentro de la función, muestra Correcto o Inválido como debería.

Aquí hay otra función donde necesito usar esta variable, pasada a gform_validation, que falla cada vez, independientemente del resultado Exitoso o Inválido:

function MBvalidate( $validation_result ) {
$form = $validation_result['form'];
if ( $status !== "Success") {
    $validation_result['is_valid'] = false;
    foreach( $form['fields'] as &$field ) {
        if ( $field->id == '34' ) {
            $field->failed_validation = true;
            $field->validation_message="Your credit card could not be processed.";
            break;
        }
    }
}
//Assign modified $form object back to the validation result
$validation_result['form'] = $form;
return $validation_result;

}

add_filter( 'gform_validation_47', 'MBvalidate' );

He intentado pasar la variable de diferentes maneras, a través de globales y sesiones, etc.

Soy nuevo en el desarrollo de GF, así que estoy seguro de que me estoy perdiendo algo. Agradecería cualquier dirección.

  • ¿Por dónde pasaste? $status variable en una función de devolución de llamada? Tienes var_dump($validation_result) variable ?

    – Touqeer Shafi

    27 de mayo de 2015 a las 4:37

  • Supongo que hiciste la variable global agregando global palabra clave dentro MBvalidate() función, es decir global $status , ¿Estoy en lo correcto? También tendrás que poner global palabra clave dentro foo() funcionar también

    – Samir Das

    27 mayo 2015 a las 11:33


avatar de usuario
niklas brunberg

los gform_after_submission el gancho de acción se ejecuta después gform_validation.

De todos modos, suponiendo que puedas encontrar un gancho que se ejecuta antes, lo que haría sería almacenar una variable única para cada formulario enviado usando el API de transitorios‘s set_transient() y get_transient() funciones Por ejemplo, puede crear un campo oculto en cada formulario que complete con una identificación aleatoria. Utilice este ID aleatorio como clave para almacenar y recuperar el resultado Correcto/Inválido.

avatar de usuario
Serguéi Kovalenko

$status aquí hay una variable local que nunca se ha definido antes de intentar usarla en condición if. Entonces, siempre es null. tal vez te perdiste

$status = $validation_result['Result']['Status'];

o algo así antes de verificar la condición.

¿Ha sido útil esta solución?