Viele Websites in Deutschland nutzen Gravity Forms für Kontakt- oder Bestellformulare. Besonders bei der Eingabe von Postleitzahlen ist es wichtig, dass nur genau fünf Zahlen erlaubt sind – alles andere soll eine Fehlermeldung auslösen.
In diesem Artikel zeige ich dir Schritt für Schritt, wie du das mit einer kleinen PHP-Funktion erreichst.
Warum eine eigene Validierung sinnvoll ist
Standardmäßig prüft Gravity Forms keine spezielle Formatierung für Postleitzahlen. Wenn du sicherstellen willst, dass nur 5-stellige Zahlen (z. B. 12345) eingegeben werden, brauchst du eine kleine Erweiterung.
Damit vermeidest du:
- Falsche oder unvollständige Adressen
- Rückfragen bei Bestellungen
- fehlerhafte Datensätze in deinem CRM-System
Eigene Validierung mit add_filter() in der functions.php
Wenn jemand das Formular absendet, ruft Gravity Forms automatisch deine Funktion custom_validation() auf. Dein Code prüft den eingegebenen Wert und gibt an WordPress zurück, ob alles gültig ist. Wenn nicht, zeigt das Formular sofort die Fehlermeldung an – noch bevor die Daten gespeichert oder verschickt werden.
Diese Funktionalität können wir nutzen, um die Postleitzahl zu überprüfen. Dazu nutzen wir den WordPress-Hook add_filter(). Der Befehl add_filter() ist eine zentrale Funktion in WordPress, mit der du dich in bestehende Abläufe des Systems „einklinken“ kannst. Ein Filter verändert Werte, bevor sie gespeichert oder angezeigt werden – er greift in den Datenfluss ein, nicht in die Ausgabe selbst.
Technisch gesehen nimmt add_filter() zwei wichtige Informationen entgegen: Zum einen den Namen des Filter-Hooks, an den du dich anhängen möchtest, und zum anderen den Namen deiner eigenen Funktion, die den gewünschten Eingriff vornimmt. Wenn WordPress später an dieser Stelle den Filter aufruft, wird deine Funktion automatisch ausgeführt.
So kannst du mit einem einfachen Aufruf wie add_filter( ‚gform_validation‘, ‚custom_validation‘ ); erreichen, dass jedes Mal, wenn ein Benutzer ein Gravity-Forms-Formular absendet, deine eigene Funktion die eingegebenen Daten überprüft, bevor das Formular tatsächlich abgeschickt wird. Auf diese Weise kannst du beispielsweise sicherstellen, dass bestimmte Felder korrekt ausgefüllt sind oder spezielle Regeln erfüllt werden. Dieses Prinzip erlaubt es dir, die Funktionalität von Gravity Forms zu erweitern, ohne den ursprünglichen Plugin-Code zu verändern, und so individuelle Prüfungen oder Anpassungen direkt in den Validierungsprozess einzubauen.
Der Code wird dabei in die functions.php deines Themes geschrieben.
Zum eigentlichen Code
add_filter( 'gform_validation_##ID-des-Formulars##', 'custom_validation' );
function custom_validation ( $validation_result ) {
/// hier prüfen wir das Feld zur Postleitzahl
}
Dies ist das Grundgerüst unseres Codes. Es beinhaltet zuerst den Aufruf add_filter() von WordPress und zielt dabei auf den Hook von Gravity Forms ‚gform_validation‘. In unserem Beispiel möchten wir ein bestimmtes Formular prüfen, dazu fügen wir dem Hook noch einen Zusatz _##ID-des-Formulars## hinzu. So wird der Filter nur auf das entsprechende Formular angewendet.
##ID-des-Formulars## entspricht dabei der ID des Formulars. Diese finden wir in der Übersicht aller Formulare im WordPress-Backend zu Gravity Forms.

Als zweite Variable von add_filter() übergeben wir noch einen string ‚custom_validation’. Dies entspricht dem Namen der Funktion, die wir aufrufen möchten. Dieser Funktion wiederum benutzt die Variable $validation_result aus dem ursprünglichen Gravity Forms Hook ‚gform_validation‘, die wir manipulieren möchten.
Die Grundfunktion zur Validierung der Postleitzahl in Gravity Forms
function custom_validation ( $validation_result ) {
$form = $validation_result['form'];
$form_id = (int) $form['id'];
$field_id = 111; // change to your field ID
foreach( $form['fields'] as &$field ) {
if ( $field->id == $field_id ) {
$value = rgpost( "input_{$field_id}" );
// Check: must be exactly 5 numbers
if ( ! preg_match( '/^\d{5}$/', $value ) ) {
$field->failed_validation = true;
$field->validation_message = 'Bitte geben Sie eine fünfstellige Postleitzahl ein.';
$validation_result['is_valid'] = false;
}
}
}
$validation_result['form'] = $form;
return $validation_result;
}
Schritt für Schritt Erklärung der Funktion der Validierung der Postleitzahl in Gravity Forms
Der Filter „gform_validation“
add_filter( 'gform_validation', 'custom_validation' );
- → Damit sagt man WordPress:
„Immer wenn ein Gravity Form überprüft wird, ruf bitte meine eigene Funktion custom_validation() auf.“
Das Formular holen
$form = $validation_result['form'];
- → Hier wird das Formular, das gerade abgeschickt wurde, in eine Variable gespeichert, damit man auf seine Felder zugreifen kann.
Das richtige Feld auswählen
$field_id = 111;
- → Das ist die ID des Feldes, das überprüft werden soll — z. B. das Feld für die Postleitzahl.
(Jedes Feld in Gravity Forms hat eine eigene Nummer.)
Alle Felder durchgehen
foreach( $form['fields'] as &$field ) {
- → Die Funktion schaut sich jedes Feld im Formular an, um das richtige (mit der ID 46) zu finden.
Wert aus dem Formular holen
$value = rgpost( "input_{$field_id}" );
- → Hier wird der tatsächliche Text geholt, den der Benutzer eingegeben hat (z. B. „12345“ oder „12ab3“).
Prüfen, ob der Wert genau 5 Ziffern hat
if ( ! preg_match( '/^\d{5}$/', $value ) )
- → Das bedeutet:
- \d = nur Ziffern (0–9)
- {5} = genau fünf davon
→ Also nur gültig, wenn der Benutzer genau 5 Zahlen eingibt.
- \d = nur Ziffern (0–9)
Fehlermeldung anzeigen, wenn es nicht passt
$field->failed_validation = true;
$field->validation_message = 'Bitte geben Sie eine fünfstellige Postleitzahl ein.';
$validation_result['is_valid'] = false;
- → Das sorgt dafür, dass:
- Das Feld rot markiert wird
- Eine Fehlermeldung erscheint
- Das Formular nicht abgeschickt wird, bis die Eingabe korrekt ist
- Das Feld rot markiert wird
Formular zurückgeben
return $validation_result;
- → Am Ende wird das geprüfte Formular zurückgegeben, damit Gravity Forms weiß, ob alles in Ordnung war.
Wo finde ich die Feld-ID für Gravity Forms-Felder?
Wenn du dein Formular im Gravity-Forms-Editor öffnest, klickst du einfach auf das Feld, das du prüfen oder verändern willst. Rechts öffnet sich das Einstellungsfeld mit Optionen wie Bezeichnung, Beschreibung oder Pflichtfeld. Ganz oben im grauen Balken des Feldes steht der Feldname – und daneben siehst du eine kleine Zahl, meist in Klammern, zum Beispiel „Postleitzahl (ID: 46)“. Diese Zahl ist die Feld-ID, die du in deinem Code verwenden kannst.

Erweiterung des Codes für mehrseitige Formulare
Mehrseitige Formulare sind in Gravity Forms eine großartige Möglichkeit, komplexe Eingaben in mehrere kleine Schritte zu unterteilen. Besonders wenn man viele Informationen abfragt, sorgen Seitenumbrüche für Übersicht und eine bessere Benutzererfahrung. Doch was passiert, wenn du eigene Validierungen oder Prüfungen nur auf einer bestimmten Seite des Formulars ausführen möchtest?
Genau hier kommt der folgende Codeabschnitt ins Spiel.
$source_page = (int) rgpost( "gform_source_page_number_{$form_id}" );
// Fallback (nicht-AJAX).
if ( ! $source_page ) {
$source_page = (int) GFFormDisplay::get_current_page( $form_id );
}
// Nur auf der Seite mit Postleitzahl.
if ( $source_page !== 7 ) {
return $validation_result;
}
Wenn ein Formular mit AJAX aktiviert ist (was bei modernen Formularen Standard ist), sendet Gravity Forms bei jedem Klick auf „Weiter“ oder „Absenden“ automatisch mit, auf welcher Seite der Benutzer gerade ist. Diese Zahl wird hier in die Variable $source_page geschrieben.
Falls dein Formular kein AJAX nutzt oder in einem Sonderfall läuft (z. B. Browser ohne JavaScript), versucht der Code, die aktuelle Seite manuell über die interne Funktion GFFormDisplay::get_current_page() zu ermitteln.
Prüfung auf die gewünschte Seite
if ( $source_page !== 7 ) {
return $validation_result;
}
Dieser Teil ist der eigentliche Filter:
Wenn die aktuelle Seite nicht die Seite mit der Nummer 7 ist, wird die Funktion sofort beendet und das Formular läuft wie gewohnt weiter.
Nur wenn der Benutzer Seite 7 abschickt, wird der restliche Teil deiner Funktion ausgeführt – zum Beispiel eine spezielle Prüfung, ob die Postleitzahl korrekt ist oder ob bestimmte Felder ausgefüllt wurden.
Dieser Code darf erst nach der Zuweisung der Variable $form_id in unseren Code eingefügt werden.
Fazit
Mit nur wenigen Zeilen Code kannst du sicherstellen, dass in deinem Gravity-Forms-Formular nur gültige Postleitzahlen eingegeben werden. Das spart dir Zeit, verhindert fehlerhafte Daten und macht dein Formular professioneller.


