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.
Mit csinál a kód
Szekció neve “Mit csinál a kód”- 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_valuesszűrővel használja a tárolt értékeket, így a későbbi beküldések tiltottak lesznek.
A kódrészlet
Szekció neve “A kódrészlet”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 );}Hová tedd a kódot
Szekció neve “Hová tedd a kódot”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.
Hogyan működik
Szekció neve “Hogyan működik”- Tanulás: a
gform_post_processmegjegyzi a címet, ha a mézesbödön elbukik és az űrlap mentés nélkül megszakad. Agform_entry_createdmegjegyzi, ha a beküldés spam állapottal mentődik. - Felejtés: a
gform_update_statuseltá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_valuesvisszaadja 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.
Testreszabás
Szekció neve “Testreszabás”- Tanulási küszöb: a
$min_countnö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.
Megjegyzések és korlátok
Szekció neve “Megjegyzések és korlátok”- 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.comvagy@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: