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/

Sobre el autor

Pablo Blanco

Llevo 22 años dedicado al desarrollo de software de forma profesional. En la actualidad también centrado en la docencia, como profesor técnico de F.P., en ciclos formativos de informática.
Titulado en Ingeniería Tec. Informática y Diplomado en CC. Empresariales.

30 Comentarios

Deja un comentario
  • 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:

    1. Utilizar la action «wpcf7_mail_sent», invocada por el plugin tras realizar el envío, para realizar una pausa en la ejecución.
    2. Crear una plantilla personalizada en tu theme y asignar esa plantilla a la página a la cual es redirigido el usuario tras hacer el submit. En esa plantilla, puedes programar algún tipo de pausa con un mensaje personalizado … el cómo ya te lo dejo a tí.

    Para realizar una pausa en php puedes usar las funciones usleep o sleep.

    Saludos!

  • 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!

  • 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!

  • 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!

  • 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

Escribe un comentario

 

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puede usar estas etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Copyright © 2024. Pablo Blanco.