Noch eine kleine Hilfe zum Lesen des Code-Beispiels:
add_filter( 'wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2 );
function custom_email_confirmation_validation_filter( $result, $tag ) {
if ( 'your-email-confirm' == $tag->name ) {
$your_email = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
$your_email_confirm = isset( $_POST['your-email-confirm'] ) ? trim( $_POST['your-email-confirm'] ) : '';
if ( $your_email != $your_email_confirm ) {
$result->invalidate( $tag, "Are you sure this is the correct address?" );
}
}
return $result;
}
Hiermit wird an der im Plugin definierten Schnittstelle wpcf7_validate_email*
für E-Mail-Felder die Funktion custom_email_confirmation_validation_filter()
aufgerufen. Möchtest du Text-Felder wie „Vorname:“ und „Nachname:“ prüfen, verwendest du statt dessen wpcf7_validate_text
. Den Funktionsnamen kannst du beliebig wählen, solange er sich nicht mit vorhandenen Funktionsnamen überschneidet.
Die Zeile
if ( 'your-email-confirm' == $tag->name ) {
prüft bei der Validierung, ob das gewählte Formularfeld (tag
) den Feldnamen your-email-confirm
hat. Möchtest du prüfen, ob Vor- und Nachname identisch sind, wirst du hier den Feldnamen des Felds für die Eingabe des Nachnamen nutzen wollen.
Mit der Zeile
$your_email = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
wird geprüft, ob beim Absenden der POST-Paramater für das Feld mit dem Namen your-email
gesetzt wurde – hier wirst du den Feldnamen für das Feld Vorname verwenden wollen.
Wurde das Feld gesetzt, wird ein um angehängte Leerstellen gesäuberter Wert des POST-Parameters verwendet, sonst nichts.
Die Zeile
$your_email_confirm = isset( $_POST['your-email-confirm'] ) ? trim( $_POST['your-email-confirm'] ) : '';
wiederholt die Prüfung, in deinem Fall diesmal für das Feld mit dem Nachnamen.
if ( $your_email != $your_email_confirm ) {
$result->invalidate( $tag, "Are you sure this is the correct address?" );
}
prüft, ob die beiden eingegebenen E-Mail-Adressen übereinstimmen und gibt sonst eine Fehlermeldung im Formular aus. Hier möchtest du ebenfalls prüfen, ob Vor- und Nachname identisch sind, dann aber die Nachricht als Spam behandeln:
if ( $last_name == $first_name ) {
add_filter('wpcf7_spam', '__return_true');
}
Insgesamt sollte es dann so aussehen:
add_filter( 'wpcf7_validate_text*', 'custom_text_confirmation_validation_filter', 20, 2 );
function custom_text_confirmation_validation_filter( $result, $tag ) {
if ( 'last_name' == $tag->name ) {
$last_name = isset( $_POST['last-name'] ) ? trim( $_POST['last-name'] ) : '';
$first_name = isset( $_POST['first-name'] ) ? trim( $_POST['first-name'] ) : '';
if ( $last_name == $first_name ) {
add_filter('wpcf7_spam', '__return_true');
}
}
return $result;
}
—
Nachtrag:
Unsere Antworten haben sich überschnitten.
Prima, dass du für dich eine Lösung gefunden hast.