Tovább a tartalomhoz

Nemkívánatos e-mail-címek automatikus tiltása kóddal

Kódrészlet, amely megjegyzi a spamvédelmen fennakadó e-mail-címeket, és a későbbi beküldéseknél elutasítja őket.

Ez az útmutató egy kódrészletet ad, amely megtanulja, eltárolja és blokkolja azokat az e-mail-címeket, amelyeket a spamvédelem elkap. A címeket egy WordPress-beállításban (opcióban) tárolja, a későbbi beküldéseket elutasítja, ha tartalmazzák ezeket az értékeket (teljes egyezés vagy részleges, például @example.com), és eltávolítja őket, ha egy beküldést később „Nem spam”-nek jelölsz.

  • Ha egy beküldés elbukik a mézesbödön (honeypot) ellenőrzésen, és az űrlap mentés nélkül megszakad, a címet megjegyzi.
  • Ha egy beküldés spamként mentődik, a címét megjegyzi.
  • Ha egy spam beküldést visszaállítasz aktívra, a címet elfelejti (csökkenti a számlálót).
  • Az E-mail mező ellenőrzése a gform_email_field_rejectable_values szűrővel használja a tárolt értékeket, így a későbbi beküldések tiltottak lesznek.
define( 'GF_EFRJ_FILTER_OPTION', 'gform_email_field_rejectable_values' );
/**
* A tárolt értékeket átadja a gform_email_field_rejectable_values szűrőnek,
* így az E-mail mező a mezőellenőrzéskor használja őket.
*/
add_filter( 'gform_email_field_rejectable_values', function ( $rejectable_values ) {
$emails = get_option( GF_EFRJ_FILTER_OPTION );
if ( empty( $emails ) ) {
return $rejectable_values;
}
// Ahányszor egy cím bekerül az opcióba, mielőtt elutasítjuk.
$min_count = 2;
$emails = array_keys( array_filter( $emails, function ( $count ) use ( $min_count ) {
return $count >= $min_count;
} ) );
return array_unique( array_merge( $rejectable_values, $emails ) );
} );
/**
* Frissíti az opciót, ha a beküldés az űrlapküldéskor spamként mentődik.
*/
add_action( 'gform_entry_created', function ( $entry, $form ) {
if ( rgar( $entry, 'status' ) !== 'spam' ) {
return;
}
update_gform_email_field_rejectable_values_option( $entry, $form );
}, 10, 2 );
/**
* Frissíti az opciót, ha a beküldés elbukott a mézesbödön-ellenőrzésen,
* és az űrlap mentés nélkül megszakad.
*/
add_action( 'gform_post_process', function ( $form ) {
$form_id = absint( rgar( $form, 'id' ) );
if ( empty( $form_id ) ) {
return;
}
if ( ! rgars( GFFormDisplay::$submission, $form_id . '/abort_with_confirmation' ) ) {
return;
}
$found = false;
$honeypot_valid = GFCache::get( 'honeypot_' . $form_id, $found, false );
if ( $found && $honeypot_valid ) {
return;
}
$entry = GFFormsModel::get_current_lead( $form );
update_gform_email_field_rejectable_values_option( $entry, $form );
} );
/**
* Frissíti az opciót, ha a beküldést utólag spamnek vagy nem spamnek jelölöd
* (például a beküldések listáján vagy a részletező oldalon).
*/
add_action( 'gform_update_status', function ( $entry_id, $new_value, $previous_value ) {
$mark_as_spam = ( $new_value === 'spam' && $previous_value === 'active' );
$mark_as_ham = ( $new_value === 'active' && $previous_value === 'spam' );
if ( ! $mark_as_spam && ! $mark_as_ham ) {
return;
}
$entry = GFAPI::get_entry( $entry_id );
if ( is_wp_error( $entry ) ) {
return;
}
$form = GFAPI::get_form( rgar( $entry, 'form_id' ) );
if ( ! $form ) {
return;
}
update_gform_email_field_rejectable_values_option( $entry, $form, $mark_as_spam );
}, 1, 3 );
/**
* Segédfüggvény az opció frissítéséhez.
*
* @param array $entry A feldolgozandó beküldés.
* @param array $form Az űrlap, amelyből a beküldés származik.
* @param bool $add Hozzáadás (true) vagy eltávolítás (false).
*/
function update_gform_email_field_rejectable_values_option( $entry, $form, $add = true ) {
$fields = GFAPI::get_fields_by_type( $form, array( 'email' ), true );
if ( empty( $fields ) ) {
return;
}
$emails = get_option( GF_EFRJ_FILTER_OPTION, array() );
if ( ! is_array( $emails ) ) {
if ( ! $add ) {
delete_option( GF_EFRJ_FILTER_OPTION );
return;
}
$emails = array();
}
foreach ( $fields as $field ) {
$email = $field->get_value_export( $entry );
if ( empty( $email ) ) {
continue;
}
if ( $add ) {
$emails[ $email ] = ( $emails[ $email ] ?? 0 ) + 1;
} elseif ( isset( $emails[ $email ] ) ) {
$emails[ $email ] -= 1;
if ( $emails[ $email ] <= 0 ) {
unset( $emails[ $email ] );
}
}
}
update_option( GF_EFRJ_FILTER_OPTION, $emails );
}

Az aktív téma functions.php fájljába, egy egyedi funkciókat tartalmazó bővítménybe, egyedi kiegészítőbe vagy kódrészlet-kezelő bővítménybe.

  • Tanulás: a gform_post_process megjegyzi a címet, ha a mézesbödön elbukik és az űrlap mentés nélkül megszakad. A gform_entry_created megjegyzi, ha a beküldés spam állapottal mentődik.
  • Felejtés: a gform_update_status eltávolítja vagy csökkenti a cím számlálóját, ha a spam beküldést visszaállítod aktívra.
  • Blokkolás: a gform_email_field_rejectable_values visszaadja a tárolt értékeket az E-mail mező ellenőrzésének. Miután egy érték legalább kétszer szerepelt ($min_count = 2), a tartalmazó beküldéseket elutasítja.

A szűrő teljes címet és részleges értéket is támogat. Az @tempmail.com például egy egész tartományt kizár.

  • Tanulási küszöb: a $min_count növelésével vagy csökkentésével szabályozhatod, hány észlelés után tiltson.
  • Egész tartományok tiltása: a update_gform_email_field_rejectable_values_option() függvényben a teljes cím helyett csak a tartományt (például @pelda.hu) normalizáld és tárold.
  • Egyes űrlapokra korlátozás: tegyél a logikára űrlapazonosító-ellenőrzést, ha csak bizonyos űrlapokon akarod a tanulást és a tiltást.
  • A tanult lista globális, minden űrlapra érvényes, hacsak kódban nem korlátozod.
  • Az űrlap előnézetében a mögöttes szűrő alapértéke üres tömb. Beágyazott űrlapoknál az alapértékek között lehet például @domain.com vagy @example.com.
  • Az e-mail-címek tárolása személyes adatnak számít. Egyeztesd az adatkezelési tájékoztatóddal és a megőrzési gyakorlatoddal.
  • A nagy opcióadat hatással lehet az automatikus betöltésre és a memóriahasználatra. Sok spam esetén időnként töröld a régi tételeket, vagy válts egyedi táblára.

Készült:

Tiszteletben tartjuk a magánszférádat

Sütiket használunk a böngészési élmény javítására és a forgalom elemzésére. Az analitika csak akkor indul, ha engeded. Adatvédelmi irányelvek, Sütitájékoztató.

Sütibeállítások