Zabezpieczenie formularzy przed spamem

gabriela

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)