Aqui vão algumas dicas para reduzir comentários spam recebidos no blog.
Plugin Akismet
Esse plugin é nosso favorito. É o mesmo usado nos blogs no wordpress.com.
Ele tem uma versão free e uma versão paga.
A versão free é muito boa, você só precisa da versão paga se tiver muitos comentários spam por mês.
Se você já possui um plugin antispam, não ative o Akismet. Ou desative o plugin que tiver, depois ative o Akismet.
É recomendado que você tenha só um plugin que faça isso.
Dois ou mais plugins para antispam pode acabar tendo o efeito contrário, porque um pode gerar conflito com outro e não resolver nada seu problema.
Configurações no painel do WordPress
No painel do WordPress em “Configurações/Discussão” (Settings/Discussion) tem algumas coisas que você pode fazer que pode ajudar a reduzir os comentários spam:
- Desative a opção Permitir notificações de link de outros blogs (pingbacks e trackbacks)
Allow link notifications from other blogs (pingbacks and trackbacks) - Ative a opção Encerrar automaticamente comentários sobre posts mais velhos que 30 dias
Automatically close comments on articles older than 30 days
As configurações acima são opcionais, elas ajudam a reduzir os comentários spam, mas se quiser deixar sem fazer isso e fazer o restante das dicas desse post, já vai ajudar a reduzir spam.
Fechar comentários em Mídia
Cada imagem que você faz upload no seu blog, gera uma página para ela. Nessa página, é possível deixar comentários.
Infelizmente não tem por padrão no painel WordPress opção para fechar comentários somente para essas páginas.
Então, abaixo tem uma função que faz isso. Basta adicionar essa função no arquivo functions.php do seu tema, e automaticamente os comentários são fechados para os arquivos de mídia.
function difluir_no_media_comments($open, $post_id) {
$post = get_post($post_id);
if ( 'attachment' == $post->post_type ) {
$open = false;
}
return $open;
}
add_filter( 'comments_open', 'difluir_no_media_comments', 10, 2 );
Arquivo .htaccess
O próprio WordPress recomenda essa função no arquivo .htaccess para reduzir spam.
Para editar esse arquivo é necessário um programa de FTP.
Esse arquivo fica na pasta raiz da onde está instalado seu WordPress.
Abra o arquivo e final de todo o código, dê uns 2 “enter” pra gerar um espaço em branco, e adicione o código abaixo:
# Protect from spam bots
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.<strong style="color:#f00;">seusite.com</strong>.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
</IfModule>
No código acima, onde tem seusite.com altere para o endereço do seu site ou blog.
Note que esse endereço não pode ter http:// e nem o www
Salve o arquivo e suba ele novamente para o FTP.
Block referrer spam
Um outro código que temos usado pra alguns clientes, é adicionar no .htaccess essa lista que bloqueia spam de robôs.
É só copiar o código inteiro e adicionar no final do seu .htaccess, salvar e subir ele novamente para o FTP.
Adicionar um campo escondido no formulário
Uma outra opção que usamos e que ajuda, é criar um campo personalizado no formulário de comentários, mas que fica escondido visualmente do visitante comum, mas visível para um robô.
Se esse campo for preenchido, o comentário não é enviado e retorna um erro.
Gosto de usar essa função no lugar de captcha, porque evita que a pessoa tenha que ficar preenchendo texto.
Para fazer isso, insira no functions.php do seu tema:
/* adicionar campo personalizado */
function difluir_comment_form_add_field() {
echo '<p style="position:absolute; left:-5000px;" aria-hidden="true">';
echo '<label for="dldcplant">'.__('Não preencha esse campo').'</label>';
echo '<input type="text" name="dldcplant" id="dldcplant" value="" class="dldcplant" tabindex="-1" />';
echo '</p>';
}
add_action( 'comment_form_logged_in_after', 'difluir_comment_form_add_field' );
add_action( 'comment_form_after_fields', 'difluir_comment_form_add_field' );
/* validar */
function difluir_validate_comment( $commentdata ) {
if ( isset($_POST['dldcplant']) && ! empty($_POST['dldcplant']) ) {
wp_die( __('Erro: spam.') );
}
return $commentdata;
}
add_filter( 'preprocess_comment', 'difluir_validate_comment' );