GravityForms – Validierungen
Um die GravityForms – Validierung für verschiedene Formulare und Felder in GravityForms dynamisch zu gestalten, kannst du ein Array mit den gewünschten Wertepaaren (Form-ID und Feld-ID) verwenden und die Filter innerhalb einer Schleife registrieren.
Hier ist ein Beispiel:
/**
* GravityForms Validierungen für mehrere Formulare und Felder
*/
$validation_rules = [
['form_id' => 2, 'field_id' => 4],
['form_id' => 1, 'field_id' => 5],
['form_id' => 3, 'field_id' => 3],
];
foreach ($validation_rules as $rule) {
add_filter("gform_field_validation_{$rule['form_id']}_{$rule['field_id']}", function($result, $value, $form, $field) use ($rule) {
// Validierung: Nur lateinische Zeichen, Zahlen und bestimmte Sonderzeichen
if (!preg_match('/^[a-zA-Z0-9\s\.,!?@#\$%\^&\*\(\)\-_\+=]*$/', $value)) {
$result['is_valid'] = false;
$result['message'] = 'Nur lateinische Zeichen und Zahlen sind erlaubt.';
}
// Zusätzliche Validierung: Keine Einträge mit "https://"
if (strpos($value, 'https://') !== false) {
$result['is_valid'] = false;
$result['message'] = 'Links mit "https://" sind nicht erlaubt.';
}
return $result;
}, 10, 4);
}
1. Array mit Regeln:
• Jedes Element im Array validation_rules enthält die form_id und field_id, die für die Validierung verwendet werden sollen.
2. Schleife:
• Die Schleife durchläuft das Array und fügt für jede Kombination von Formular- und Feld-ID einen eigenen Filter hinzu.
3. Dynamische Registrierung:
• Der Filtername gform_field_validation_{form_id}_{field_id} wird dynamisch aus den Werten im Array generiert.
Mit dieser Methode kannst du einfach neue Wertepaarungen hinzufügen, indem du sie dem Array validation_rules hinzufügst, ohne zusätzlichen Code für jede einzelne Kombination schreiben zu müssen.
Im nächsten Beispiel zeige ich Dir, wie Du verschiedene Formularfelder in der akzeptierten Zeichenanzahl beschränken kannst:
function custom_limit_input_length($result, $value, $form, $field) {
// Begrenzung für spezifische Felder und Formulare
$max_lengths = [
// Formular-ID => [Feld-ID (Array) => Maximale Zeichenanzahl]
1 => [6 => 64, 7 => 64], // Formular 1
2 => [6 => 64, 7 => 64], // Formular 2
3 => [6 => 10, 7 => 64] // Formular 3
];
$form_id = $form['id'];
$field_id = $field->id;
// Prüfen, ob das aktuelle Feld eine Begrenzung hat
if (isset($max_lengths[$form_id][$field_id])) {
$max_length = $max_lengths[$form_id][$field_id];
if (strlen($value) > $max_length) {
$result['is_valid'] = false;
$result['message'] = "Bitte maximal {$max_length} Zeichen eingeben.";
}
}
return $result;
}
add_filter('gform_field_validation', 'custom_limit_input_length', 10, 4);
Standardfunktionalität anpassen: Gravity Forms fügt oft automatisch ein maxlength-Attribut hinzu, basierend auf den Feldeinstellungen. Mit dem folgenden Code wird es gezielt entfernt, z. B. um Nutzern zu erlauben, mehr Zeichen einzugeben oder um das Attribut für bestimmte Felder zu ignorieren, bzw die Funktionalitäät des vorherigen Codes zu gewährleisten.
function remove_maxlength_attribute($content, $field, $value, $lead_id, $form_id) {
if (in_array($field->id, [6, 7]) && in_array($form_id, [1, 2, 3])) {
$content = preg_replace('/maxlength="[^"]*"/', '', $content);
}
return $content;
}
add_filter('gform_field_content', 'remove_maxlength_attribute', 10, 5);