Contact Form 7 – HTML-Filter für Input-Felder
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.

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.