2015-05-20 21 views
10

Ich habe eine Funktion, die Verkäufe über einen Drittanbieterdienst verarbeitet, das Ergebnis verarbeitet und ein Array mit dem Status "Success" oder "Invalid" zurückgibt. Dieser Verkaufsaufruf wird mithilfe des Hooks gform_after_submission durchgeführt, der auf das bestimmte Formular angewendet wurde.Gravity Forms benutzerdefinierter Validierungsfilter

Was ich tun muss, ist das "Success" oder "Invalid" Ergebnis im Array als eine Variable zu speichern, die ich später an eine Funktion übergeben kann, um das Kreditkartenfeld mit gform_validation hook zu validieren oder ungültig zu machen.

Ich erkläre die Variable in einer Funktion, etwa so:

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

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

Wenn ich drucken Sie die Variable $ Status innerhalb der Funktion ist es, die entweder Erfolg oder ungültig, wie es sollte.

ist hier eine andere Funktion, wo ich brauche diese Variable zu verwenden, um gform_validation übergeben, die jedes Mal, unabhängig von Erfolg oder ungültige Fehler auftreten:

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

ich versucht haben, die Variable eine Reihe von verschiedenen Möglichkeiten vorbei, via globals und sessions etc.

Ich bin neu in der GF-Entwicklung, also bin ich mir sicher, dass mir etwas fehlt. Ich würde jede mögliche Richtung schätzen.

+0

Wo haben Sie bestanden? '$ status' Variable in einer Callback-Funktion? haben Sie 'var_dump ($ validation_result)' Variable? –

+0

Ich gehe davon aus, dass Sie die Variable global gemacht haben, indem Sie 'global' Schlüsselwort in' MBvalidate() 'Funktion hinzugefügt haben, also' global $ status ', bin ich richtig? Außerdem müssen Sie das 'global' Schlüsselwort in die 'foo()' Funktion einfügen – Samir

Antwort

0

$status Hier ist eine lokale Variable, die nie definiert wurde, bevor Sie versuchen, sie in if-condition zu verwenden. Also, es ist immer null. Vielleicht verpaßt

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

oder so etwas wie dies vor dem Zustand zu überprüfen.

1

Der gform_after_submission Aktionshaken läuft nachgform_validation.

Wie auch immer, vorausgesetzt, Sie kann find a hook, die früher läuft, was würde ich tun ist, speichert eine eindeutige Variable für jede eingereichten Form der Transients API ‚s set_transient() und get_transient() Funktionen. Zum Beispiel können Sie in jedem Formular, das Sie mit random ID ausfüllen, ein verstecktes Feld erstellen. Verwenden Sie diese zufällige ID als Schlüssel zum Speichern und Abrufen des Ergebnisses Erfolg/Ungültig.