2015-05-20 18 views
10

Ho una funzione che elabora le vendite tramite un servizio di terze parti, elabora il risultato e restituisce un array con lo stato "Success" o "Invalid". Questa chiamata di vendita viene effettuata utilizzando l'hook gform_after_submission applicato al modulo specifico.Filtro di convalida personalizzato Gravity Form

Quello che devo fare è archiviare il risultato "Success" o "Invalid" nell'array come variabile che successivamente posso passare a una funzione per convalidare o invalidare il campo della carta di credito, usando gform_validation hook.

che sto dichiarando la variabile in una funzione, in questo modo:

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

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

Quando ho stampare lo stato $ variabile all'interno della funzione, si sta mostrando successo o non valido come dovrebbe.

Ecco un'altra funzione in cui ho bisogno di usare questa variabile, passata a gform_validation, che non riesce ogni volta a prescindere dal successo o il risultato non valido:

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'); 

ho provato passando la variabile di un certo numero di modi diversi, tramite globals e sessioni, ecc.

Sono nuovo nello sviluppo di GF quindi sono sicuro che mi manca qualcosa. Gradirei qualsiasi direzione.

+0

Dove sei passato? Variabile '$ status' in una funzione di callback? hai la variabile 'var_dump ($ validation_result)'? –

+0

Suppongo che tu abbia reso la variabile globale aggiungendo la parola chiave 'global' all'interno della funzione 'MBvalidate()', ad esempio 'global $ status', sono corretto? Dovrai anche mettere la parola chiave 'global' all'interno della funzione 'foo()' – Samir

risposta

0

$status qui è una variabile locale che non è mai stata definita prima di provare a utilizzarla in condizione if. Quindi, è sempre null. Forse ti sei perso

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

o qualcosa di simile prima di controllare la condizione.

1

Il gancio di azione gform_after_submission è dopogform_validation.

In ogni caso, supponendo che si può find a hook che corre in precedenza, quello che vorrei fare è archiviare una variabile univoco per ogni modulo inviato utilizzando set_transient() e get_transient() funzioni s' il Transients API. Ad esempio è possibile creare un campo nascosto in ogni forma che si popola con un random ID. Utilizzare questo ID casuale come chiave per archiviare e recuperare il risultato positivo/non valido.