Affiliate-Programme können eine gute Möglichkeit sein, um zusätzlichen Traffic und Verkäufe zu generieren. Auch für WooCommerce gibt es einige Plugins, die das Shop-System um diese Funktionalität erweitern. Obwohl ich bei Neuinstallationen mittlerweile auf die Plugins "SliceWP" oder "AffiliateWP" setze, ist bei einigen älteren Kunden auch noch das Plugin "WP Affiliate Manager" im Einsatz.
Bei einer Kundin können sich neue Partner selbst registrieren. Nach ca. 4 Jahren wurde das Formular dann auch von Bots gefunden - und es folgten hunderte Spam-Registrierungen pro Tag.
WP Affiliate Manager bietet "von Haus aus" einen Spamschutz per Google ReCaptcha an. Leider zieht Google ReCaptcha einen datenschutzrechtlichen Rattenschwanz hinter sich her, weshalb ich gerade bei einfachen Anwendungsfällen gerne auf den Einsatz verzichte.
Glücklicherweise sind die meisten Bots auch im Jahr 2024 nicht besonders schlau. Eine einfache Abfrage wie "Wie lautet die Hauptstadt von Deutschland?" reicht meistens schon, um dem Spam ein Ende zu setzen. Eine solche Abfrage lässt sich auch für das Plugin implementieren. Dazu verwenden wir den Filter "wpam_validate_registration_form_submission" (dieser wird auch vom Google ReCaptcha-Addon verwendet).
Zunächst musst du dafür ein neues Feld unter "Affiliates" > "Einstellungen" > "Affiliate-Registrierung" > "Feldkonfiguration Affiliate-Registrierung" anlegen. Gib dem Feld z.B. den Anzeigenamen "Spam-Schutz: Wie heißt die Hauptstadt von Deutschland (z.B. Paris)?" und setze den "Feldname" auf "spamProtection". Natürlich sollte es sich um ein Pflichtfeld handeln.
Anschließend verwendest du folgenden Code, z.B. in der functions.php oder in einem Code Snippets-Plugin:
/* Avoid Spam in WP Affiliates plugin */
add_filter('wpam_validate_registration_form_submission', 'mn_add_custom_affiliate_spam_protection', 10, 2);
function mn_add_custom_affiliate_spam_protection( $output, $request ) {
if( !isset( $request['_spamProtection'] ) ) {
echo "Das Feld Spam-Schutz muss ausgefüllt werden";
$output = 'error';
}
else if( $request['_spamProtection'] != "Berlin" && $request['_spamProtection'] != "berlin" ) {
echo "Die Antwort auf die Spamschutz-Frage ist falsch. Bitte probiere es noch einmal. Sonst helfen wir Dir auch gerne per E-Mail.";
$output = 'error';
}
return $output;
}
Das sollte dem Spam ein Ende setzen! Natürlich kannst du die Logik beliebig anpassen, eine andere Frage einbauen,...