Zabezpieczenie formularzy przed spamem
Artykuł z 13 kwietnia, 2026
1. Utworzenie w formularzu pola tekstowego.
Nazwa pola powinna brzmieć naturalnie (np. website, url , company) – nie honeypot czy trap.
Przykład:
- pole tekstowe o nazwie “company_website”
- autouzupełnianie wyłączone
- klasa CSS: hp-field
- etykieta włączona” “Firma”
- dodany CSS:
selector .hp-field {
width: 1px !important;
height: 1px !important;
top: -9999px !important;
left: -9999px !important;
position: absolute !important;
opacity: 0 !important;
}
2. W pliku function dodanie funkcji sprawdzającej wartość ukrytego pola.
Jeśli jest wypełnione – formularz nie zostanie wysłany i wyświetli się alert. Jeśli pozostanie puste – formularz się wyśle, a etykieta nie wyświetli się w treści maila.
add_filter( 'kadence_blocks_advanced_form_submission_reject', function( $reject, $form_args, $processed_fields, $post_id ) {
foreach ( $processed_fields as $field ) {
if ( ! is_array( $field ) ) {
continue;
}
if ( ( $field['name'] ?? '' ) !== 'company_website' ) {
continue;
}
$fieldValue = trim( (string) ( $field['value'] ?? '' ) );
if ( $fieldValue !== '' ) {
add_filter( 'kadence_blocks_advanced_form_submission_reject_message', function( $message ) {
return __('Twoje zgłoszenie zostało oznaczone jako spam i nie zostało wysłane.', 'kadence-blocks');
}, 10, 1 );
return true;
}
return $reject;
}
return $reject;
}, 10, 4);
Uwagi:
- rozwiązanie nie zapewnia w 100% ochrony antyspamowej
- nie zatrzyma ręcznego spamu
- może nie działać, jeśli bot analizuje CSS
- warto nadal korzystać z reCaptcha (najlepiej V2 i ręczna weryfikacja)