Probleem:
Sinds een aantal dagen heb ik last van spam reacties onder blogs op mijn website. Het gaat vaak om 10-20 berichten per dag die ook allemaal zichtbaar worden voor mijn bezoekers.
De reacties bestaan alleen uit een naam + e-mailadres en hetzelfde e-mailadres wordt ook als reactie achtergelaten.
Ik heb echt geen flauw idee wat de toegevoegde waarde is van alleen een e-mailadres zoals naam@domein.nl…
In eerste instantie was het telkens bij hetzelfde blog. Na 1 dag heb ik daar de reactie functionaliteit uitgeschakeld. Maar zoals ik al verwacht had werden de spam reacties toen onder een ander blog geplaatst.
Hoe los ik dit probleem op?
Oplossing:
Vreemd genoeg zou ik verwachten dat Akismet dit eruit zou filteren. Immers heb ik daarvoor een betaalde licentie. Ik heb contact met hen opgenomen maar tot op heden is het probleem nog niet opgelost.
Het IP-adres blokkeren is ook geen optie want het zijn telkens verschillende IP adressen. Het zijn ook willekeurige e-mailadressen dus daar kan ik ook niet op filteren.
Daarom heb ik onderstaand PHP script geschreven:
function child_theme_remove_spam_comments( $idComment, $commentApproved){ if (1 === $commentApproved) { $comment = get_comment($idComment, ARRAY_A); if (!str_contains($comment['comment_content'], ' ')) { if (str_contains($comment['comment_content'], '@')) { $skipTrashbin = false; wp_delete_comment($idComment, $skipTrashbin); } } } } add_action('comment_post','child_theme_remove_spam_comments', 10, 2);
Toelichting:
- Deze functie heb ik toegevoegd aan mijn functions.ph bestandp van mijn child theme
- De reactie moet goedgekeurd zijn door WordPress en/of Akismet
- De reactie mag maximaal 1 woord bevatten, daarom controleer ik op een spatie
- Als de reactie 1 woord en een @ teken bevat verwijder ik de spam reactie
Voor analyse doeleinden verwijder ik de reacties niet definitief.
Ik hoop ook dat Akismet deze spam reacties in de toekomst eruit filtert zodat bovenstaand PHP script niet meer nodig is.
Getest op:
WordPress 6.6.2