no-comments-spam

No más comentarios SPAM en WordPress

Actualmente administro varias páginas y blogs creados en WordPress y no es muy divertido recibir cientos de comentarios spam y tener que estar eliminandolos, estuve buscando varias soluciones, entre ellas plugins que agregan captchas al formulario de comentarios lo cual no resulto demasiado efectivo ya que aún así se saltaban la protección y ademas es molesto para el lector.

Finalmente en un comentario de un blog encontre una solución que me ha funcionado muy bien, la cual consiste en algunas funciones que tenemos que agregar al final del archivo functions.php que se encuentra dentro del tema que tengamos activo.

//---------------------------------------
//      Spam Comments Checker
//---------------------------------------
function get_the_user_ip() {
    if ( ! empty( $_SERVER['HTTP_CLIENT_IP'] ) ) {
    //check ip from share internet
    $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif ( ! empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) {
    //to check ip is pass from proxy
    $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
    $ip = $_SERVER['REMOTE_ADDR'];
    }
    return apply_filters( 'dm_get_ip', $ip );
}

function preprocess_new_comment($commentdata) {
    $userIdesntity = md5( get_the_user_ip().time() );
    if( !isset( $_POST['is_valid_comment'] ) && trim( $_POST['is_valid_comment'] )== $userIdesntity ) {
        die( 'You are bullshit' );
    }
    return $commentdata;
}

if( function_exists( 'add_action' ) ) {
    add_action( 'preprocess_comment', 'preprocess_new_comment' );
    add_action( 'comment_form_after', 'comment_spam_prevention', 20 );
    
}

function comment_spam_prevention(){
    $userIdesntity = md5(get_the_user_ip().time());
    ?>
    <script type="text/javascript">
    var cForm = jQuery('.comment-form');
    
    cForm.find('input[type=submit]').on('click', function(e){
        e.preventDefault();
        jQuery.ajax({
            url: cForm.attr('action') + '?' + cForm.serialize() + '&is_valid_comment=',
            method: 'post'
        }).done(function( data ) {
        })
        .fail(function() {
            alert( "error" );
        });
    });
    </script>
    <?php    
}

//---------------------------------------
//      EOF Spam Comments Checker
//---------------------------------------

Nota: Es necesario que se encuentre jQuery activado en el tema.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>