>

Contact Form 7 – HTML-Filter für Input-Felder

15. April 2025

Das WordPress-Plugin Contact Form 7 ist wahrscheinlich das populärste Plugin für Kontaktformulare für WordPress mit über 10 Millionen Downloads – Stand April 2025.

Contact Form 7 HTML Filter custom validation Thumbnail

Die nicht besonders flexible Anpassungsfähigkeit im programmatischen Bereich ist ein großer Kritikpunkt des Plugins.

Bei einem Projekt hatten wir den Anspruch alle Input-Felder des Formulars auf HTML-Elemente mit Custom Validation zu überprüfen, um die Sicherheit der Kontakt-Anfragen zu erhöhen.

Unten findest du das Code-Snippet mit dem wir erreicht haben, dass alle verpflichtenden E-Mail-, Text- und Textarea-Inputs auf HTML-Elemente gecheckt und beim Auffinden das Input-Feld invalidiert wird.

In Contact Form 7 ist eine Validierung der Benutzereingabe als Filterfunktion implementiert.

Contact Form 7 – HTML-Filter Snippet

add_filter( 'wpcf7_validate_email*', 'custom_cf7_html_filter', 20, 2 );
add_filter( 'wpcf7_validate_textarea*', 'custom_cf7_html_filter', 20, 2 );
add_filter( 'wpcf7_validate_text*', 'custom_cf7_html_filter', 20, 2 );

if ( !function_exists( 'custom_cf7_html_filter' ) ) {
    function custom_cf7_html_filter( $result, $tag ) {
        if ($_POST[$tag->name] != strip_tags($_POST[$tag->name])) {
	    $result->invalidate( $tag, "Please do not use HTML!" );
        }

	return $result;
    }
}

Contact Form 7 stellt einen Filter-Hook für Email-Felder zur Verfügung – wpcf7_validate_email, das * angehängt filtert nach allen verpflichtenden E-Mail-Feldern. Ebenso verhält es sich für Text-Inputs (wpcf7_validate_text*) und Textarea-Felder (wpcf7_validate_textarea*).

Zwei Parameter werden an die Filterfunktion übergeben: $result und $tag. $result ist eine Instanz der Klasse WPCF7_Validation, die eine Sequenz von Validierungsprozessen verwaltet. $tag ist eine Instanz von WPCF7_FormTag.

Über $tag->name wird der Wert des Input-Feldes aus dem $_POST-Array ausgelesen und mit strip_tags() auf HTML-Elemente überprüft. Schlägt dieser Vergleich fehl, so wird das Resultat invalidiert und das Formular kann nicht abgesendet werden. Alle HTML-Elemente müssen vorher aus den Formular-Feldern gelöscht werden.

Das Snippet muss in die functions.php des verwendeten Themes eingebunden werden, oder in einer ausgelagerten Datei, die wiederum in der functions.php verlinkt wird.

Quellen und weiterführend Links

Hinterlasse Feedback

Deine E-Mail-Adresse wird nicht veröffentlicht!