Contact Form 7 – Redirigir a otra URL tras el envío
Por defecto, el plugin de wordpress «Contact Form 7» para la gestión de formularios HTML, redirige la navegación hacia la misma página del formulario tras realizar el envío (submit). Si el navegador admite Ajax, la página no se vuelve a cargar y realmente no apreciamos esa redirección, pero el efecto es el mismo, sin cambiar de página (de url) el plugin muestra un mensaje confirmando que los datos del formulario han sido enviados.
Sin embargo, es posible que en algún caso necesitemos redirigir la navegación a otra página tras rellenar y enviar el formulario.
Un ejemplo: Suscripción a una promoción
Es posible que necesitemos redirigir la navegación a otra página (a otra url) tras el correcto envío del formulario, por ejemplo, si estamos realizando la promoción de un producto en nuestro portal Web y el usuario se apunta a ella utilizando el formulario. Tras hacer clic en el botón que hace el envío y validar los datos introducidos, llevamos al usuario a una página en la que le confirmamos que la suscripción a la promoción se ha realizado correctamente.
Supongamos que hemos creado el formulario con el plugin «Contact Form 7» y que ya tenemos creada la página Web de confirmación, cuya url es por ejemplo http://www.pabloblanco.es/suscripcion-confirmada/
Ahora nos queda configurar el formulario para que al hacer el submit se haga la redirección. Entramos en la configuración del formulario, en el plugin «Contact Form 7», y descendemos hasta encontrar el apartado «Configuración adicional». En este apartado introducimos el siguiente código:
on_sent_ok: "location = 'http://www.pabloblanco.es/suscripcion-confirmada/';"
Sencillo, ¿No? Esta explicación la podéis encontrar también en la Web del autor del plugin, en la siguiente dirección:
http://contactform7.com/redirecting-to-another-url-after-submissions/
Gracias, me fue muy util.
Es increíble como una «simple linea» puede aportar tanto, jejejeje.
Muchas gracias, me fue de gran ayuda.
Buenas Pablo,
Una pregunta, eso mismo se podria hacer, pero que fuera redireccionado en «X» segundos despues de mandar el mensaje, es decir, a ese location se le puede asignar un tiempo??
Muchas gracias !!
Hola Raúl:
El autor del plugin no dice nada al respecto, pero te propongo dos posibles soluciones:
Para realizar una pausa en php puedes usar las funciones usleep o sleep.
Saludos!
Muchas gracias por tu respuesta.
Intentaremos hacerlo de esa forma.
Hola Pablo,
Muchas gracias por el Post, me ha sido de gran utilidad, pero me queda una cuestión pendiente, quizá puedas resolvermela;
Una vez redirecciono a esa nueva URL como podría, con los datos de contacto que me han enviado, hacer una review? es decir, como podría utilizar las etiquetas de wpc7 para pegarlas en esa página para que la persona que relleno el formulario revise que todos sus datos están correctos?
Muchas gracias
Saludos
Hola iagoba:
Si ese feedback es necesario, lo normal es que lo reciba el usuario por email, tras hacer el submit. Podrías configurar el envío de una copia al usuario, añadiendo lo siguiente en el campo «Encabezados adicionales» en la configuración del formulario:
CC: [your-email]
Lo anterior suponiendo que «your-email» hace referencia al campo del formulario en el que el usuario introduce su email.
De todas formas, para buscar una posible solución a tu pregunta, podrías plantearte almacenar en una tabla de la base de datos el contenido introducido por el usuario en el formulario, para luego recuperarlo y mostrárselo en la página a la cual es redirigido.
El principal problema en este caso es saber qué datos mostrar al usuario en la página a la cual es redirigido. Podríamos pensar en mostrar el último registro almacenado, pero ¿qué ocurre si dos usuarios rellenan el formulario y hacen el submit en el mismo instante?
Este problema estaría resuelto si el usuario está registrado en el portal y ha iniciado sesión, ya que siempre podrías almacenar en la tabla, junto al resto de los datos del formulario, el identificador único del usuario.
Si es un usurio genérico (no registrado en el portal), la cosa se complica. En este caso la url a la que es redirigido el usuario tras hacer el submit debería llevar un parámetro haciendo referencia al registro insertado (por ej. su clave primaria). Por ejemplo:
http://www.pabloblanco.es/suscripcion-confirmada?peticion=234
En la página destino recuperaríamos el registro almacenado utilizando la variable superglobal
$_GET['peticion']
, para luego lanzar la consulta y obtener los datos a mostrar.Para hacer todo lo anterior (insertar el registro en la base de datos, recuperarlo, modificar la url a la que es redirigido, etc.) creo que podrías utilizar la action «wpcf7_mail_sent», la cual se lanza una vez se ha validado y enviado el email.
Bueno, ya me contarás ….
Saludos!
PD: Ya que la solución propuesta supone almacenar datos en la base de datos procedentes de un formulario, no te olvides de utilizar funciones como «sanitize_text_field» para evitar ataques del tipo «Inyección SQL». Te recomiendo en este caso consultar la siguiente página de WordPress: Data Validation
Hola!
Lo primero, muchas gracias por toda la ayuda que ofreces en tus posts. A mí por lo menos me están salvando de muchos bloqueos a la hora de hacer la página que me han encargado.
He seguido todos los pasos que indicas para redireccionar a otra página un formulario de contacto (en mi caso es una solicitud de más información del curso que se elija). El problema es que al darle a «enviar», se queda como pensando (una especie de símbolo de actualización girando constantemente)… no redirecciona ni tampoco hace nada más que pensar… da la sensación de que la página se ha bloqueado o algo. El caso es que la solicitud sí que me llega a la cuenta de correo que tengo asignada y también al solicitante el email de confirmación. Ya no pido que redireccione la página… pero sí que indique algo de que el formulario se ha enviado correctamente, un «ya está», vamos. Sabrías por qué sale ese símbolo de actualización constante y no se cambia la página? Gracias de antemano!
Hola uso,
Veo difícil ayudarte, hay varias situaciones en las que se podría plantear un problema similar.
Lo que yo haría es determinar en primer lugar si se está produciendo un error al ejecutar código de php, revisando el log de errores del servidor tras realizar una prueba con el formulario, o si se está produciendo un error de javascript, visualizando por ejemplo la consola de errores de Mozilla Firefox al realizar la prueba.
Un saludo!
Hola, ante todo gracias Pabblo por tus explicaciones, mi duda es….podría este plug in redirigirte a paginas en función de do o tres variables?si el formulario es:
1 tu ciudad: madrid/ bcn y
2 tu edad: entre 20-25/ más de 25
Que redirija distinto cruzando las variables, se podría? habría algún plug in que lo hace????o algun tutorial que cconozcais????Mil gracias!!!!
Hola Rosa:
Me temo que no te puedo ayudar en estos momentos.
De todas formas te propongo una prueba, si tienes posibilidad de hacerla. Verifica si el valor asignado a «on_sent_ok» se puede modificar por programación durante la validación del formulario (en la action «wpcf7_validate_email»), antes de que se envíe el formulario si es OK.
Si se pudiera, en esa misma action podrías leer los valores introducidos por el usuario en los campos «tu ciudad» y «tu edad», y modificar la url asignada a «on_sent_ok» según te interese.
Un saludo!
Muy bueno!! rápido y efectivo!!
Pablo, muchas gracias por el post.
Lo que intentado mil veces y no me funciona. He consultado la web del programador del plugin, donde ha insertado un formulario de ejemplo, para comprobar si la redirección no funciona por un problema con Java. El caso es que mi formulario (sin la redirección) funciona exactamente igual que el suyo de ejemplo, es decir, sí funciona java correctamente, pero con la redirección no hay manera. Es algo que necesito solucionar. ¿Me podrías ayudar?
Muchísimas gracias.
Hola Marta:
Envíame a través del formulario de contacto la url de la página en la que está el formulario. Antes asegúrate de que está configurado con la redirección, para hacer una prueba. Si detecto algo que sea útil para los lectores te contesto por aquí.
Un saludo!
Ok, Pablo, mil gracias.
Aquí te dejo el formulario, de contact form 7. He seguido las instrucciones, pero nada.
http://redijl.org/inscripcion-basica/
Si me puedes ayudar te lo agradezco mucho.
Marta.
Hola Pablo, muy útil, hasta aquí puedo llegar.
El problema que tengo es el siguiente, ando muy mal de PHP y necesito que dicho formulario, contenga opcion, esto se hace facilmente desde las etiquetas. Lo que ocurre es que para ejecutar la votación e impedir correos falsos tipo *** el mail que se envia al usuario tenga un link de confirmación, así mismo se añada a la Base de datos de PHP y más tarde ejecutar yo mismo el conteo de votos.
He añadido la extensión «Contact Form 7 Dynamid text» pero no soy capaz de que ande
¿Como lo harías tu? Un saludo Pablo, gracias.
Hola Sandro:
Si lo que deseas es crear una encuesta o votación, creo que este no es el plugin más adecuado. Personalmente no he usado la extensión que comentas y no sé cómo funciona, o si lo hace bien.
Para evitar spam y otras participaciones maliciosas puedes usar un parámetro a la hora de añadir alguno de los campos (nombre o email por ejemplo) para que sea analizado por akismet (el sistema anti-spam de Automattic, los creadores de WordPress). Sin embargo, evitar que se use un correo inexistente es algo más complicado y seguramente la medida más fiable es la que intentas usar, añadir un link de confirmación en el email enviado.
Para almacenar los datos del formulario en la base de datos puedes usar la action «wpcf7_mail_sent», como ya he comentado.
Un saludo!
Me ayudo mucho este post!!! Gracias!!
Muchas gracias por la información, más sencillo imposible!
Muy útil, lo recomendaré a mis alumnos!
Un saludo y gracias de nuevo!
Hola Pablo,
Sabrias como hacer para en un comando:
on_sent_ok: «location = ‘www.google.com?Nombre=Pepe&Email=xxxxxx@gamil.com&Telefono=6666666&ciudad=Londres&Tratamiento=Dentista’;»
Pueda recoger y pasar los parametros introducidos por el usuario ?
Hola Lucho,
Rosa me pregunta algo parecido, en un comentario anterior. Revísalo por favor. En la respuesta que le doy, comento que no he tenido la oportunidad de probar si la modificación de esa «Configuración adicional» por programación tiene efectos en el formulario que se está enviando. Tendrías que hacer una prueba (si la haces, te agradecería que la comentaras aquí).
Un saludo!
Hola Pablo
Tengo una web donde utilizo el mismo formulario en varias post diferentes.
Como puedo hacer para saber exactamente de que post se envió?
Quiero que en el mail que me llega desde el formulario de contacto tambien llegue la informacion del titulo del post o la url del post.
es posible?
Gracias
Hola Santiago,
Lo puedes hacer incluyendo un campo oculto en tu formulario. El tipo del campo será hidden, y en el valor del campo puedes poner el nombre del post, o por ejemplo el id.
Un saludo!
Hola Pablo. Gracias por tu post. Pregunta. Deseo enviar un archivo PDF automaticamente cuando la persona me haya enviado sus datos por Contact Form 7… Me puedes decir si hay linea de código para esto, y cual es? Muchas gracias!
Hola Claudia,
La acción «wpcf7_mail_sent» se ejecuta tras realizar el envío. En ella podrías programar cualquier tarea, como el envío de un archivo pdf por mail.
Para declarar que vas a hacer algo en esa acción escribirías por ejemplo:
add_action('wpcf7_mail_sent', 'enviar_pdf');
Sólo te queda implementar la función «enviar_pdf» que realiza el envío:
function enviar_pdf ($aForm) {
// Aquí tu implementación
}
Saludos!
Hola buenas tardes, y si por ejemplo de ese mismo «submit» ¿Se podría invocar una función PHP personalizada? ¿Es eso posible? No tengo conocimiento de PHP, esta pregunta es solo para desmentirme y ya no seguir perdiendo el tiempo con esto jejeje, espero y me puedas ayudar! Saludos cordiales
Hola gracias ante todo,
Me gustaria saber si en la configuracion adicional del plugin contact-form-7 puedo reeviar a una pagina dependiendo de la opcion que elijan en un desplegable.
saludos
Hola!! Gracias por el dato, pero tengo entendido que ese evento ya quedará inactivo a partir del 2018. Además, me enteré de una forma de redireccionar con Jquery pero no la encuentro. Sería grandioso si lo muestran. Gracias.
Hola buenas, tengo una duda, me gustaría saber si hay alguna manera de reenviar la información del formulario a la persona que lo rellena además del destinatario normal.
¡Hola Pablo!
Gracias por la claridad con que expones los argumentos. Sin embargo tras introducir la línea en ajustes adicionales con la url a la página de confirmación de «Reserva satisfactoria», sigue reseteándose el formulario pero no deriva al destino.
¿Hay algún comando adicional que no se haya mencionado?
Muchas gracias.
Tony