Validación personalizada

Contact Form 7 proporciona varios tipos de validación de los datos de entrada del usuario por defecto, que incluyen:

  • ¿Se ha completado un campo obligatorio?
  • ¿Un campo de correo electrónico tiene una dirección de correo electrónico con el formato correcto?
  • ¿Un archivo cargado está en un tipo y tamaño de archivo aceptable?

También puedes añadir tu propia validación personalizada.

Para demostrar cómo implementar una validación personalizada, hagamos un campo de confirmación del correo electrónico. Este campo te solicita que introduzcas la dirección de correo electrónico que introdujiste en otro campo del formulario. Se comparan las dos direcciones de correo electrónico que has introducido y, si no son idénticas, se mostrará un mensaje de error de validación para alertarte.

Contact Form 7 no es compatible con campos de confirmación de correo electrónico por defecto (porque creo que es ridículo: ¿quién quiere escribir la misma dirección dos veces? La gente sabe copiar y pegar). Aun así, puede ser un buen ejemplo de validación personalizada.

Validación como filtro

En Contact Form 7, se implementa una validación de los datos de entrada del usuario como una función de filtro. El gancho de filtro usado para la validación varía según el tipo de etiqueta de formulario y se determina como: wpcf7_validate_ + {tipo de etiqueta de formulario}. Por lo tanto, para las etiquetas de formulario de texto, se usa el gancho de filtro wpcf7_validate_text. Del mismo modo, wpcf7_validate_email* se utiliza para las etiquetas de formulario de email*.

Supongamos que tienes los siguientes campos de correo electrónico en un formulario:

Correo electrónico:              [email* your-email]
Confirmar el correo electrónico: [email* your-email-confirm]

El fragmento de código a continuación muestra un código que verifica si los dos campos tienen valores idénticos.

add_filter( 'wpcf7_validate_email*', 'custom_email_confirmation_validation_filter', 20, 2 );
 
function custom_email_confirmation_validation_filter( $result, $tag ) {
  if ( 'your-email-confirm' == $tag->name ) {
    $your_email = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
    $your_email_confirm = isset( $_POST['your-email-confirm'] ) ? trim( $_POST['your-email-confirm'] ) : '';
 
    if ( $your_email != $your_email_confirm ) {
      $result->invalidate( $tag, "¿Estás seguro(a) que esta es la dirección correcta?" );
    }
  }
 
  return $result;
}

Se pasarán dos parámetros a la función de filtro: $result y $tag. $result es una instancia de la clase WPCF7_Validation que gestiona una secuencia de procesos de validación. $tag es una instancia de la clase WPCF7_FormTag que apareció en los fragmentos de código anteriores.

Mire dentro de la función de filtro. Primero, se verifica el nombre de la etiqueta de formulario para asegurarse de que la validación se aplica solo al campo específico (your-email-confirm).

Luego se comparan los dos valores de los campos de correo electrónico y, si no coinciden, se llamará $result->invalidate(). Debes pasar dos parámetros al método invalidate(): el primer parámetro debe ser la variable $tag y el segundo parámetro es el mensaje de error de validación que deseas que muestre el campo.

Por último, no olvides devolver $result.