Como evitar correos duplicados en Contact Form 7

Como evitar correos duplicados en Contact Form 7

Tabla de Contenidos

En este post ampliaremos la funcionalidad de Contact Form 7 de WordPress filtrando correos que ya han rellenado el formulario.

Contact Form 7 tiene una gran multitud de usos y herramientas a disposición de los desarrolladores web para crear el formulario perfecto. En este caso explicaré de como como evitar correos duplicados en Contact Form 7 implementando vuestra propia función. 

Insertamos la función para detectar correos duplicados en Contact Form 7

Lo necesario para aplicar este tutorial es tener el Contact Form instalado en tu WordPress y tu formulario ya creado y tener el plugin instalado.

Los creadores de esta función se han basado en la funcionalidad de core del propio  Contact Form 7 Custom Validation

Plugin necesario 

El código del plugin necesario par poder usar la función de filtro y detectar si el correo de tu contact form 7 en concreto el Contact form 7 to Database Extension nos abre la posibilidad de tener una gestión de base de datos de nuestros leads. Gracias a ello vamos a poder tener un registro de usuarios que hayan rellenado nuestro formulario para quedar guardados en el sistema. 

Tambien puedes descargar el plugin desde aquí

En el caso de que ya tengamos instalada la extensión nos iremos a el archivo de funciones de nuestra tema en:

  • /wp-content/themes/NOMBRE-TEMPLATE/functions.php

Para que este código te funcione tienes que aplicar cambios relativos a tu formulario para recoger el campo que se quiera validar. Lo que tendrás que modificar es el campo de nombre del formulario de Contact Form 7 y el campo que recoge el Mail (Ej: «mail») en el formulario.

Para evitar correos duplicados en Contact Form 7 los campos a modificar son:

  • $formName – Por el nombre de tu formulario
  • $fieldName – Nombre de tu campo de correo
  • $errorMessage – Edita el mensaje error que aparecerá en el formulario
/**
 * @param $formName string
 * @param $fieldName string
 * @param $fieldValue string
 * @return bool
 */
function is_already_submitted($formName, $fieldName, $fieldValue) {
    require_once(ABSPATH . 'wp-content/plugins/contact-form-7-to-database-extension/CFDBFormIterator.php');
    $exp = new CFDBFormIterator();
    $atts = array();
    $atts['show'] = $fieldName;
    $atts['filter'] = "$fieldName=$fieldValue";
    $atts['unbuffered'] = 'true';
    $exp->export($formName, $atts);
    $found = false;
    while ($row = $exp->nextRow()) {
        $found = true;
    }
    return $found;
}
/**
 * @param $result WPCF7_Validation
 * @param $tag array
 * @return WPCF7_Validation
 */
function my_validate_email($result, $tag) {
    $formName = 'Nombre del Formulario'; // Cambia por el nombre de tu formulario 
    $fieldName = 'email_123'; // Cambia por el campo name de tu correo
    $errorMessage = 'Este correo ya esta inscrito'; // Cambia por tu mensaje de error
    $name = $tag['name'];
    if ($name == $fieldName) {
        if (is_already_submitted($formName, $fieldName, $_POST[$name])) {
            $result->invalidate($tag, $errorMessage);
        }
    }
    return $result;
}
add_filter('wpcf7_validate_email*', 'my_validate_email', 10, 2);

Fuente del código 

Validar mas de un campo para detectar correos duplicados en Contact Form 7

Ya podemos empezar a hacer cambios para detectar correos duplicados en Contact Form 7. Recuerda tener descargado e instalado el modulo para que se guarden los registros e implementado el código de arriba. 

Si queremos comprobar que un usuario no haya metido otro campo a parte del mail recogido por Contact Form 7 de WordPress como por ejemplo el campo de DNI o Pasaporte entonces tendremos que añadir otra funcion para el validador.

/**
 * Añadimos el campo de DNI como ejemplo para verificar
 */
function my_validate_dni($result, $tag) {
    $formName = 'Nombre del Formulario'; // Cambia por el nombre de tu formulario 
    $fieldName = 'dni'; // Cambia por tu otro campo a validar (Puede ser texto)
    $errorMessage = 'Este correo ya esta inscrito'; // Cambia por tu mensaje de error
    $name = $tag['name'];
    if ($name == $fieldName) {
        if (is_already_submitted($formName, $fieldName, $_POST[$name])) {
            $result->invalidate($tag, $errorMessage);
        }
    }
    return $result;
}

Recuerden añadir al final de todas vuestras funciones de validación sus filtros. En caso de indicar el campo de DNI en el validador se quedarían de esta manera.

add_filter('wpcf7_validate_email*', 'my_validate_email', 10, 2); 
add_filter('wpcf7_validate_text*', 'my_validate_dni', 10, 2);
0 0 votos
Article Rating
Subscribirse
Notificacion de
guest
0 Comments
Feedbacks en línea
Ver todos los comentarios