Support » Plugins » Contact Form 7 Spamfilter

  • Gelöst wpapm

    (@wpapm)


    Hallo,

    ich verwende auch diesen Custom spam filter und der funktioniert auch.

    Ich scheitere allerdings dabei den Filter anzupassen. Der Filter soll prüfen ob der Vor- und Familienname identisch sind. Und wenn dies so ist … soll die Mail als Spam behandelt werden.

    Dafür müsste ich doch „nur“ die if-Anweisung ändern?

    Ich hatte auch hier im englischen Support nachgefragt, aber leider ist mein Englisch nicht gut genug für weitere Nachfragen 🙁

    Dort bekam ich einen Hinweis auf einen anderen Filter wie z.B identische Felder geprüft werden können. Funktioniert ja auch, auch wenn ich diesen zur Prüfung von Vor- und Zunamen verwende. Aber dieser Filter gibt ja im Formular lediglich einen Hinweis auf die identischen Felder und entspricht damit nicht meinen Vorstellungen die Mail als ganzes dann einfach als Spam zu verarbeiten (wie im erstgenannten Filter möglich).

    Hm … kann mir da jemand eventuell auf die Sprünge helfen?

    Mit freundlichen Grüßen

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)
  • Moderator Bego Mario Garde

    (@pixolin)

    Du bekommst das Plugin bereits kostenlos zur Verfügung gestellt. Es wäre etwas viel erwartet, wenn dich der Plugin-Entwickler bei persönlichen Anpassungswünschen auch noch unterstützen soll.

    Mit Anwendungssupport, den wir hier anbieten möchten, hat das auch wenig zu tun. Am besten stellst du deine Frage auf WordPress Stackexchange, wo Programmierfragen diskutiert werden.

    Status des Thread auf „keine Support-Frage“ geändert.

    Thread-Starter wpapm

    (@wpapm)

    Hallo Bego,

    eine Erwartungshaltung habe ich bei Fragen weder hier im Forum noch bei einem Entwickler. Ich stelle lediglich eine Frage und bitte damit um eine Reaktion, in welcher Form die dann auch immer ausfallen mag … oder auch gänzlich.

    Ich konnte das Problem mittlerweile selber lösen, eine Nacht drüber schlafen und es klappte dann doch!

    Mit freundlichen Grüßen

    Moderator Bego Mario Garde

    (@pixolin)

    Noch eine kleine Hilfe zum Lesen des Code-Beispiels:

    add_filter( 'wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2 );
      
    function custom_email_confirmation_validation_filter( $result, $tag ) {
      if ( 'your-email-confirm' == $tag->name ) {
        $your_email = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
        $your_email_confirm = isset( $_POST['your-email-confirm'] ) ? trim( $_POST['your-email-confirm'] ) : '';
      
        if ( $your_email != $your_email_confirm ) {
          $result->invalidate( $tag, "Are you sure this is the correct address?" );
        }
      }
      
      return $result;
    }

    Hiermit wird an der im Plugin definierten Schnittstelle wpcf7_validate_email* für E-Mail-Felder die Funktion custom_email_confirmation_validation_filter() aufgerufen. Möchtest du Text-Felder wie „Vorname:“ und „Nachname:“ prüfen, verwendest du statt dessen wpcf7_validate_text. Den Funktionsnamen kannst du beliebig wählen, solange er sich nicht mit vorhandenen Funktionsnamen überschneidet.

    Die Zeile
    if ( 'your-email-confirm' == $tag->name ) {
    prüft bei der Validierung, ob das gewählte Formularfeld (tag) den Feldnamen your-email-confirm hat. Möchtest du prüfen, ob Vor- und Nachname identisch sind, wirst du hier den Feldnamen des Felds für die Eingabe des Nachnamen nutzen wollen.

    Mit der Zeile
    $your_email = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
    wird geprüft, ob beim Absenden der POST-Paramater für das Feld mit dem Namen your-email gesetzt wurde – hier wirst du den Feldnamen für das Feld Vorname verwenden wollen.
    Wurde das Feld gesetzt, wird ein um angehängte Leerstellen gesäuberter Wert des POST-Parameters verwendet, sonst nichts.

    Die Zeile
    $your_email_confirm = isset( $_POST['your-email-confirm'] ) ? trim( $_POST['your-email-confirm'] ) : '';
    wiederholt die Prüfung, in deinem Fall diesmal für das Feld mit dem Nachnamen.

    if ( $your_email != $your_email_confirm ) {
          $result->invalidate( $tag, "Are you sure this is the correct address?" );
    }

    prüft, ob die beiden eingegebenen E-Mail-Adressen übereinstimmen und gibt sonst eine Fehlermeldung im Formular aus. Hier möchtest du ebenfalls prüfen, ob Vor- und Nachname identisch sind, dann aber die Nachricht als Spam behandeln:

    if ( $last_name == $first_name ) {
          add_filter('wpcf7_spam', '__return_true');
        }

    Insgesamt sollte es dann so aussehen:

    add_filter( 'wpcf7_validate_text*', 'custom_text_confirmation_validation_filter', 20, 2 );
    function custom_text_confirmation_validation_filter( $result, $tag ) {
      if ( 'last_name' == $tag->name ) {
        $last_name = isset( $_POST['last-name'] ) ? trim( $_POST['last-name'] ) : '';
        $first_name = isset( $_POST['first-name'] ) ? trim( $_POST['first-name'] ) : '';
    
        if ( $last_name == $first_name ) {
          add_filter('wpcf7_spam', '__return_true');
        }
      }
    
      return $result;
    }

    Nachtrag:
    Unsere Antworten haben sich überschnitten.
    Prima, dass du für dich eine Lösung gefunden hast.

    Moderator Bego Mario Garde

    (@pixolin)

    Ich stelle lediglich eine Frage und bitte damit um eine Reaktion, in welcher Form die dann auch immer ausfallen mag …

    Dann ist doch eigentlich alles klar?
    Du hast eine Frage gestellt, die inhaltlich weder hier noch im Supportforum des Plugins hingehört und im Rahmen der Moderation habe ich die Gründe erläutert.

    Dass ich hier im Nachgang weiter auf deine Frage eingegangen und ein Beispiel geliefert habe, war eine Ausnahme – überflüssig, wie ich inzwischen weiß, weil du ja längst eine Lösung gefunden hast.
    Wieso du den Thread dann nicht gleich mit einem entsprechenden Hinweis als „gelöst“ markiert hast, brauchen wir nicht weiter zu diskutieren.

    Schad‘ um die Zeit? Ja, aber mich hatte die Lösung interessiert.

    Thread-Starter wpapm

    (@wpapm)

    Hallo Bego,

    Danke für deine sehr ausführliche Beschreibung zu dieser Lösung, die ich mir noch genauer ansehe da ich einen anderen Weg beschritten hatte (eher Spaghetticode) …

    Und deine Antwort war ganz sicher nicht überflüssig! Auch wenn ich zu einer anderen Lösung kam sieht mir deine nämlich viel besser aus! Und jetzt können andere ebenfalls von deiner ausführlichen Beschreibung profitieren 🙂

    Danke für deine Zeit und Mühe – ich schätze das sehr!

    Und … zu meiner Lösung kam ich erst kurz bevor ich meinen letzten Beitrag hier schrieb … und das Thema auf gelöst setzte. Oder hatte ich das vergessen und du hast den Beitrag auf gelöst gesetzt? Dann entschuldige bitte mein Versäumnis.

    Mit freundlichen Grüßen

Ansicht von 5 Antworten - 1 bis 5 (von insgesamt 5)