Filtrado personalizado de mensajes no deseados

Los artículos de la categoría Manual del desarrollador abordan temas que requieren conocimiento técnico. Ten cuidado y utiliza las técnicas descritas a continuación bajo tu propia responsabilidad. Si no tienes experiencia en desarrollo, y necesitas ayuda, te recomendamos solicitar el apoyo de un profesional.

La protección contra mensajes no deseados es una misión crítica para los formularios web. El plugin Contact Form 7 proporciona varios tipos de módulos de protección contra mensajes no deseados (spam) para bloquear de manera efectiva el envío por parte de spammers.

Al igual que otras partes de Contact Form 7, su función de filtrado de mensajes no deseados está diseñada para ser altamente personalizable. En este fragmento de código, te mostraré cómo implementar un filtro personalizado de mensajes no deseados con ejemplos simples de código.

El gancho de filtro wpcf7_spam

El filtro de mensajes no deseados de Contact Form 7 se implementa como una función PHP que está conectada al gancho de filtro wpcf7_spam. Si una función de filtro determina que el envío en curso un mensaje no deseado, la función devuelve true (verdadero).

El siguiente código PHP es un ejemplo simple de un filtro de mensaje no deseado. Esta función de filtro determina que el envío es un mensaje no deseado si la entrada del usuario incluye la mundialmente famosa palabra de spam: Viagra.

add_filter( 'wpcf7_spam', function( $spam ) {
  if ( $spam ) {
    return $spam;
  }

  if ( false !== stripos( $_POST['your-message'], 'viagra' ) ) {
    $spam = true;
  }

  return $spam;
}, 10, 1 );

Observa que la función de filtro primero verifica la variable $spam, y si es true, devuelve la variable sin buscar «viagra» en la entrada del usuario.

¿Por qué? El valor inicial establecido en la variable $spam es false (falso). Si ves que $spam es true al comienzo de tu función de filtro, es porque hay otra función de filtro conectada al mismo gancho de filtro wpcf7_spam (que tiene mayor prioridad que la tuya), y ha devuelto true.

Esto significa que otro filtro de mensaje no deseado ya ha determinado que el envío es un mensaje no deseado y, por lo tanto, no necesita hacer un filtrado adicional.

Registro de envíos de mensajes no deseados

Dado que existen varios tipos de filtros de mensajes no deseados funcionando, sería útil si dejaras un registro que explique qué filtro marcó el envío como mensaje no deseado y por qué.

Para dejar un registro de mensajes no deseados, llama al método de instancia add_spam_log() de la clase WPCF7_Submission. add_spam_log() toma una matriz asociativa como único argumento y esa matriz debe incluir las siguientes variables:

  • agent: Una palabra clave o nombre único que identifique a tu filtro personalizado.
  • reason: Un texto breve que describa la razón por la cual el filtro ha determinado que el envío es un mensaje no deseado.

El siguiente ejemplo muestra el uso de add_spam_log() dentro del filtro anterior que detecta la palabra Viagra:

add_filter( 'wpcf7_spam', function( $spam ) {
  if ( $spam ) {
    return $spam;
  }

  if ( false !== stripos( $_POST['your-message'], 'viagra' ) ) {
    $spam = true;

    // Dejando un registro del mensaje no deseado.
    $submission = WPCF7_Submission::get_instance();

    $submission->add_spam_log( array(
      'agent' => 'detector_de_viagra',
      'reason' => "El plugin detectó la palabra Viagra.",
    ) );
  }

  return $spam;
}, 10, 1 );

Puedes ver los registros de mensajes no deseados con un plugin de almacenamiento de mensajes que sea compatible con el registro de mensajes no deseados. Flamingo es uno de esos plugins, y lo recomendamos a los usuarios de Contact Form 7.