Jak zabezpieczyć komentarze WordPress przed spamem

Jeśli prowadzisz blog, warto włączyć możliwość komentowania wpisów, żeby być w kontakcie z czytelnikami. WordPress udostępnia system komentarzy, który nie wymaga żadnego rejestrowania się czy logowania, co według mnie sprzyja odzewowi czytelników. Swego czasu miałam na stronie system komentarzy Disqus, bo szybko się go wdraża (moja strona nie jest zrobiona w WordPressie, więc nie mogłam skorzystać z jego komentarzy), ale po pierwsze: nie podobał mi się wizualnie (za dużo tego było), po drugie: aby komentować, trzeba się było logować, po trzecie: okropnie spowalniał stronę, bo ładował masę śmieci na stronę. Dlatego uważam, że domyślne komentarze WordPress są naprawdę fajne i warto z nich korzystać. Co jednak ze spamem? Każdy formularz działa jak magnes na spam boty i trzeba się przed nimi zabezpieczyć.

Przede wszystkim włącz moderację komentarzy. Dzięki temu każdy komentarz będzie musiał być przez Ciebie zatwierdzony i spam nie pojawi się automatycznie na Twojej stronie. Jednak nawet to nie uchroni Cię przed falą spamu, który będzie trafiał do bazy danych, i który będzie trzeba przeglądać, żeby wyłuskać prawdziwe komentarze. Jak żyć w takiej sytuacji?

Jednym z możliwych – i bardzo szybkich do wdrożenia – rozwiązań jest tzw. honeypot, czyli dodatkowe pole w formularzu, które jest ukryte przed człowiekiem, ale widoczne dla botów. Każdy, kto wypełni pole-pułapkę, jest kwalifikowany jako spam bot, a jego komentarz jest automatycznie odrzucany.

Poniższy kod możesz wkleić do pliku functions.php swojego motywu potomnego. Możesz też użyć wtyczki Code Snippets.

add_action( 'comment_form_top',  'add_phone_field_on_comment_form');
function add_phone_field_on_comment_form() {
  echo '<p class="comment-form-phone">' .
    '<label for="phone">Pozostaw to pole puste</label>
    <span class="required">*</span>
    <input id="phone" name="phone" size="30" type="text" /></p>';
}

add_filter( 'preprocess_comment', 'preprocess_comment_check_spam' );
function preprocess_comment_check_spam( $commentdata ) {
  if ( ( $_POST['phone'] ) ) {
    wp_die('Wypełnij tylko widoczne pola.');
  }

  return $commentdata;
}

add_action('wp_head', function() {
  if (is_single()) { ?>
  <style>
    .comment-form-phone {opacity: 0; z-index: -100; width: 0; height: 0; margin: 0;}
  </style>
<?php }
});

Ten kod doda do formularza pole-pułapkę z numerem telefonu. Pole jest ukryte za pomocą CSS-a, a ponieważ spam boty nie zwracają uwagi na CSS, chętnie je wypełniają.

Uwaga: ponieważ niektórzy prawdziwi ludzie korzystają z czytników stron (które również ignorują CSS), trzeba zostawić dla nich wiadomość, żeby nie wypełniali pola-pułapki. W powyższym kodzie wiadomość ta brzmi "Pozostaw to pole puste".

Inne rozwiązania

Jeśli pułapka przestaje wystarczać, możesz sięgnąć po Akismet lub reCAPTCHĘ. Oba rozwiązania wymagają jednak rejestracji i pozyskania klucza API.

Pani Marta
Jestem Marta. Pani Marta. I piszę o rzeczach, które inspirują mnie i ciekawią w pracy web developera. Na moim blogu znajdziesz porady dotyczące WordPressa i programowania stron, a także moje osobiste przemyślenia na najróżniejsze tematy.

Masz pytania lub uwagi? Zostaw komentarz :-)

Pola oznaczone gwiazdką są obowiązkowe.

Podaj swoje imię lub nazwę. Ta nazwa będzie widoczna przy Twoim komentarzu.
Napisz komentarz.