Crear la tabla para guardar los datos en la base de datos.

CREATE TABLE `wp_tps_forms` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `form` varchar(100) NOT NULL DEFAULT '',
  `data` text NOT NULL,
  `date` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

Llamar la función justo antes del envío de correo con el hook wpcf7_before_send_mail.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
 
add_action('wpcf7_before_send_mail', 'save_form' );
 
function save_form( $wpcf7 ) {
   global $wpdb;
 
   /*
    Nota: desde la version 3.9 Contact Form 7 ha eliminado $wpcf7->posted_data
    y ahora se accede a los datos a través de API.
   */
 
   $submission = WPCF7_Submission::get_instance();
 
   if ( $submission ) {
 
       $submited = array();
       $submited['title'] = $wpcf7->title();
       $submited['posted_data'] = $submission->get_posted_data();
 
    }
 
     $data = array(
   		'name'  => $submited['posted_data']['name'],
   		'email' => $submited['posted_data']['email']
   	     );
 
     $wpdb->insert( $wpdb->prefix . 'tps_forms', 
		    array( 
                          'form'  => $submited['title'], 
			   'data' => serialize( $data ),
			   'date' => date('Y-m-d H:i:s')
			)
		);
}
Contact Form 7, guardar formulario en la base de datos
Etiquetado en:

11 pensamientos en “Contact Form 7, guardar formulario en la base de datos

    • abril 9, 2015 a las 11:46
      Enlace permanente

      Hola Diego,
      El SQL puedes ponerlo en el programa con el que gestionas la base de datos, (phpMyAdmin, Sequel Pro, …).
      La función php la puedes poner en un plugin creado para tu web, o bien en el archivo functions.php de tu theme.

      Siento responder tan tarde…
      Saludos!

  • mayo 27, 2015 a las 17:27
    Enlace permanente

    Hola Lucy:
    Te hago una consulta, por lo que veo tu script guarda solamente ‘name’ y ‘email’.
    Logicamente, en caso de querer guardar un formulario extenso, tendria que generar un array con todos los campos del form.
    Supongamos que yo creo dos forms con CF7, llamemoslos FORM-A y FORM-B

    FORM-A es un formulario de muchos campos, para recabar datos especificos. Tiene al menos 30 campos. En el quiero usar tu hook, para guardarlo en la DB de wordpress.

    FORM-B es un formulario de contacto normal, de 4 o 5 campos. No necesito guardarlo.

    Ya que el plugin es el mismo, y la funcion wpcf7_before_send_mail se va a aplicar a todos los forms creados con el CF7; como deberia hacer, para que, en el FORM-B se saltee to hook y trabaje el plugin de manera normal? Se te ocurre como hacerlo?

    Agradezco de antemano tu respuesta.
    Saludos cordiales

    Responder
    • junio 4, 2015 a las 09:56
      Enlace permanente

      Hola Juan Manuel,
      Perdona por tardar en responder. La función siempre se llamará en el hook wpcf7_before_send_mail, eso es inevitable, pero sí puedes poner alguna condición dentro de la misma función save_form por ejemplo con el título. Si sólo quieres guardar el Form A y ningún otro formulario, puedes indicar que si el título no es Form A que no siga.


      if( 'Form A' != $wpcf7->title() ) return;

  • agosto 19, 2015 a las 21:47
    Enlace permanente

    Hola como puedo agregar los datos del formulario en mi base de datos con contact form 7?

    Responder
  • marzo 22, 2016 a las 18:04
    Enlace permanente

    Saludos Lucy,

    Una consulta, tu script funciona perfecto, ahora, podrías ayudarme porque quiero mostrar los datos guardado en una pagina cualquiera.

    Gracias

    Responder
  • abril 22, 2016 a las 16:24
    Enlace permanente

    Hola, estoy intentando utilizar este hook pero no funciona. He puesto este codigo en el function.php de theme y nada que funciona. Es como si no pasara por la function.
    Me podrias ayudar con mi problema por favor, ya no se que mas hacer para que functione.

    Responder
  • octubre 4, 2016 a las 06:29
    Enlace permanente

    Hola, espero este bien, me gustaria poder consultarte lo siguiente:

    creé una base de datos con Contact form DB, y me funciona bien, solo que tengo un campo en mi formulario donde se ingresa un archivo, cuando visualizo la base de datos me aparecen todos los campos y en el campo de la imagen aparece el nombre del archivo, le doy clic y se visualizal a imagen, la cuestion es que no quiero que aparesca el nombre, en su lugar quiero una miniatura de ese archivo.

    de antemano gracias por tu atencion y ayuda, saludos.

    Responder
  • noviembre 30, 2016 a las 13:01
    Enlace permanente

    Hola Lucy.
    Tu codigo funciona genial, pero cuando quiero almacenar los datos separados, no consigo separar los datos en sus variables. Si estas por aquí y quieres echarle un vistazo:
    *
    title();
    $submited[‘posted_data’] = $submission->get_posted_data();
    }
    if ( ‘players’ == $title ) {
    $name = $posted_data[‘name’];
    $email = $posted_data[‘email’];
    }
    $wpdb->insert( $wpdb->prefix . ‘players’,
    array(
    ‘form’ => $submited[‘title’],
    ‘name’ => $name,
    ‘email’ => $email,
    ‘date’ => date(‘Y-m-d H:i:s’)
    )
    );
    }
    *

    Responder
  • junio 19, 2018 a las 03:44
    Enlace permanente

    Buenas tardes coloque la funcion en el archivo function.php del tema y nno funciona quisiera saber cual podria ser el problema ???

    add_action(‘wpcf7_before_send_mail’,’save_form’);

    function save_form( $wpcf7 ) {
    global $wpdb;

    /*
    Nota: desde la version 3.9 Contact Form 7 ha eliminado $wpcf7->posted_data
    y ahora se accede a los datos a través de API.
    */

    $submission = WPCF7_Submission::get_instance();

    if ( $submission ) {

    $submited = array();
    $submited[‘title’] = $wpcf7->title();
    $submited[‘posted_data’] = $submission->get_posted_data();

    }

    $data = array(
    ‘eventos’ => $submited[‘posted_data’][‘eventos’],
    ‘nombre’ => $submited[‘posted_data’][‘nombre’],
    ‘primer_apellido’ =>$submited[‘posted_data’][‘primer_apellido’],
    ‘segundo_apellido’ => $submited[‘posted_data’][‘segundo_apellido’],
    ‘numero_federado’ => $submited[‘posted_data’][‘numero_federado’],
    ‘telefono’ => $submited[‘posted_data’][‘telefono’],
    ‘correo_electronico’ => $submited[‘posted_data’][‘correo_electronico’]
    );
    //print_r($data);exit;
    $wpdb->insert(‘wp_tps_forms’, // $wpdb->prefix .
    array(
    ‘form’ => $submited[‘title’],
    ‘data’ => serialize( $data ),
    ‘date’ => date(‘Y-m-d H:i:s’)
    )
    );
    }

    Responder

Deja un comentario

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