charliek
Necesito el Formulario de contacto 7 para enviar un correo electrónico cuando se haya realizado la validación. ha fallado. Luego, envíe el correo electrónico CF7 normal cuando el formulario se envíe correctamente. ridiculo lo se pero clientela!
Creo que estoy relativamente cerca con lo siguiente:
function send_failed_vaildation_email( $data ) {
$messagesend = 'Name:' . $_POST['your-name'];
$messagesend .= '\r\nEmail:' .$_POST['email'];
$messagesend .= '\r\nPhone:' .$_POST['validPhone'];
$messagesend .= '\r\nRate:' .$_POST['rate'];
$messagesend .= '\r\nBased:' .$_POST['based'];
wp_mail('c******y@gmail.com', 'failed validation mail', $messagesend );
}
add_filter("wpcf7_posted_data", "send_failed_vaildation_email");
Sin embargo, esto envía todos los envíos sin importar si pasan o fallan la validación.
wpcf7_before_send_mail
no es bueno ya que solo se dispara una vez que el envío pasa la validación.
Estoy buscando un gancho diferente para usar en lugar de wpcf7_posted_data
que solo se activa cuando falla la validación o una declaración if que puedo colocar alrededor wp_mail
por el mismo efecto.
Gracias por adelantado
Así es como logré hacerlo funcionar.
La respuesta de @rnevius estaba fallando porque el wpcf7_posted_data
El filtro se aplica antes de validar los datos, por lo que nada es inválido en ese momento.
Combinando la respuesta de @rnevius con la wpcf7_submit
filtro y funciona como se esperaba.
Código completo:
function send_failed_vaildation_email() {
$submission = WPCF7_Submission::get_instance();
$invalid_fields = $submission->get_invalid_fields();
$posted_data = $submission->get_posted_data();
if ( !empty( $invalid_fields ) ) {
$messagesend = 'Name:' . $posted_data['your-name'];
$messagesend .= '\r\nEmail:' . $posted_data['email'];
$messagesend .= '\r\nPhone:' . $posted_data['validPhone'];
$messagesend .= '\r\nRate:' . $posted_data['rate'];
$messagesend .= '\r\nBased:' . $posted_data['based'];
$messagesend .= count($invalid_fields);
wp_mail('c*******y@gmail.com', 'failed validation mail', $messagesend );
}
}
add_filter("wpcf7_submit", "send_failed_vaildation_email");
-
Asegúrate de marcar esto como correcto, cuando tengas la oportunidad. 🙂
– rnevio
6 de marzo de 2015 a las 15:11
nevio
Esto no ha sido probado, pero estoy bastante seguro de que necesitará conectarse al get_invalid_fields() instancia. Algo como:
function send_failed_vaildation_email() {
$submission = WPCF7_Submission::get_instance();
$invalid_fields = $submission->get_invalid_fields();
$posted_data = $submission->get_posted_data();
if ( !empty( $invalid_fields ) ) {
$messagesend = 'Name:' . $posted_data['your-name'];
$messagesend .= '\r\nEmail:' . $posted_data['email'];
$messagesend .= '\r\nPhone:' . $posted_data['validPhone'];
$messagesend .= '\r\nRate:' . $posted_data['rate'];
$messagesend .= '\r\nBased:' . $posted_data['based'];
wp_mail('c******y@gmail.com', 'failed validation mail', $messagesend );
}
}
add_filter("wpcf7_posted_data", "send_failed_vaildation_email");
Puedes ver el proceso de envío del formulario en el seguimiento del complemento.
EDITAR: También acabo de notar la 'wpcf7_validation_error'
enganchar contacto-formulario.php… Eso puede ser todo lo que necesita, ya que solo se activa cuando hay un error.
-
Gracias por investigar esto, desafortunadamente ninguno de los dos métodos funciona…
get_invalid_fields()
El método hace que el formulario se cuelgue al enviar; no se realiza ninguna validación/envío.wpcf7_validation_error
permite que el formulario se valide pero no se envía ningún correo electrónico.– charliek
5 de marzo de 2015 a las 11:42
-
Cuando probó el segundo método, ¿lo usó con su código original? ¿O mis cambios anteriores? También deberías intentar enviar una prueba
wp_mail()
con contenido de prueba, dentrowpcf7_validation_error
. Otra cosa… CF7 valida a través de JS, así como PHP…– rnevio
5 de marzo de 2015 a las 12:19
-
Lo siento, acabo de volver a investigar esto. Para el
wpcf7_validation_error
método Usé mi código original sin alegría. Luego lo probé con su código modificado y aún así no funcionó, lo cual sabía que no sucedería. Como sugirió, también lo probó con una pruebawp_mail()
, de nuevo sin suerte (¡puedes ver un patrón!). Estoy evitando hacerlo a través de JS, ya que creo que el cliente solicitará que se transfieran los datos a una base de datos una vez que comiencen a recibir innumerables correos electrónicos basura. Ho hum, siento que nos estamos acercando, seguiré jugando e informaré cualquier cosa que encuentre.– charliek
6 de marzo de 2015 a las 12:27
-
Estoy más cerca de encontrar el problema –
$submission->get_invalid_fields()
siempre devuelve 0, incluso si hay campos no válidos, lo que obviamente significa queif ( !empty( $invalid_fields ) )
declaración no se está disparando. Me puse en contacto con el desarrollador de CF7 en los foros de WP para ver si puede ayudar.– charliek
6 de marzo de 2015 a las 14:06
-
¿Y la validación no se realiza a través de JS?
– rnevio
6 de marzo de 2015 a las 14:22
CÓDIGO ACTUALIZADO PARA EL ÚLTIMO FORMULARIO DE CONTACTO 7
function is_gmail($email) {
if(substr($email, -10) == '@gmail.com') {
return true;
} else {
return false;
};
};
function custom_email_validation_filter($result, $tag) {
$tag = new WPCF7_Shortcode( $tag );
if ( 'your-email' == $tag->name ) {
$the_value = isset( $_POST['your-email'] ) ? trim( $_POST['your-email'] ) : '';
if(!is_gmail($the_value)){
$result->invalidate( $tag, "Are you sure this is the correct address?" );
};
};
return $result;
};
add_filter('wpcf7_validate_email','custom_email_validation_filter', 20, 2); // Email field
add_filter('wpcf7_validate_email*', 'custom_email_validation_filter', 20, 2); // Required Em
Este es uno de los requisitos de proyecto más extraños que he escuchado en mucho tiempo…
– rnevio
5 de marzo de 2015 a las 10:57
@rnevius ¡SÍ! Realmente no podía creer lo que preguntaban, pero tienen (lo que creen que es) una razón válida para capturar los datos.
– charliek
5 de marzo de 2015 a las 11:05