{"id":1880,"date":"2023-04-13T10:00:00","date_gmt":"2023-04-13T16:00:00","guid":{"rendered":"http:\/\/racmanuel.dev\/?p=1880"},"modified":"2023-04-04T21:45:23","modified_gmt":"2023-04-05T03:45:23","slug":"conectar-contact-form-7-con-una-base-de-datos-externa","status":"publish","type":"post","link":"https:\/\/racmanuel.dev\/en\/conectar-contact-form-7-con-una-base-de-datos-externa\/","title":{"rendered":"Connecting Contact Form 7 to an external database"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">En este tutorial, aprender\u00e1s a crear un plugin personalizado de WordPress que conecta el popular plugin Contact Form 7 con una base de datos externa a WordPress. Al final de este tutorial, tendr\u00e1s un plugin que guarda los datos enviados a trav\u00e9s de un formulario de contacto en una base de datos externa.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img fetchpriority=\"high\" decoding=\"async\" width=\"592\" height=\"460\" src=\"http:\/\/racmanuel.dev\/wp-content\/uploads\/image-86.png\" alt=\"\" class=\"wp-image-2029\" title=\"\" srcset=\"https:\/\/racmanuel.dev\/wp-content\/uploads\/image-86.png 592w, https:\/\/racmanuel.dev\/wp-content\/uploads\/image-86-300x233.png 300w\" sizes=\"(max-width: 592px) 100vw, 592px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"preparacion\">Preparaci\u00f3n:<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Aseg\u00farate de tener instalado y activado Contact Form 7 en tu sitio WordPress.<\/li>\n\n\n\n<li>Crea un formulario en Contact Form 7 y toma nota del ID del formulario que utilizar\u00e1s en este tutorial.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-1-configurar-el-entorno-de-desarrollo\">Paso 1: Configurar el entorno de desarrollo<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>En la carpeta wp-content\/plugins de tu instalaci\u00f3n de WordPress, crea una nueva carpeta llamada &#8220;cf7-external-db&#8221;.<\/li>\n\n\n\n<li>Dentro de esta carpeta, crea un archivo llamado &#8220;cf7-external-db.php&#8221; e incluye la siguiente informaci\u00f3n en la cabecera del archivo:<\/li>\n<\/ol>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\/*\nPlugin Name: Contact Form 7 - Base de datos externa\nPlugin URI: https:\/\/tusitio.com\/cf7-external-db\nDescription: Un plugin personalizado de WordPress para conectar Contact Form 7 con una base de datos externa.\nVersion: 1.0\nAuthor: Tu nombre\nAuthor URI: https:\/\/tusitio.com\nLicense: GPL2\n*\/\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-2-establecer-la-conexion-a-la-base-de-datos-externa-utilizando-wpdb\">Paso 2: Establecer la conexi\u00f3n a la base de datos externa utilizando $wpdb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade las siguientes variables globales y la funci\u00f3n de conexi\u00f3n en &#8220;cf7-external-db.php&#8221;:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">\/\/ Reemplaza con los detalles de conexi\u00f3n de tu base de datos externa\ndefine('CF7_EXTERNAL_DB_HOST', 'tu_host');\ndefine('CF7_EXTERNAL_DB_USER', 'tu_usuario');\ndefine('CF7_EXTERNAL_DB_PASSWORD', 'tu_contrase\u00f1a');\ndefine('CF7_EXTERNAL_DB_NAME', 'tu_base_de_datos');\n\nfunction cf7_external_db_connect() {\n    global $wpdb;\n    \n    $wpdb_external = new wpdb(CF7_EXTERNAL_DB_USER, CF7_EXTERNAL_DB_PASSWORD, CF7_EXTERNAL_DB_NAME, CF7_EXTERNAL_DB_HOST);\n    $wpdb_external-&gt;set_prefix($wpdb-&gt;prefix);\n    return $wpdb_external;\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-3-enviar-datos-del-formulario-a-la-base-de-datos-externa-utilizando-wpdb\">Paso 3: Enviar datos del formulario a la base de datos externa utilizando $wpdb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Reemplaza la funci\u00f3n <code>cf7_external_db_store_data<\/code> en &#8220;cf7-external-db.php&#8221; con la siguiente funci\u00f3n que utiliza la clase <code>$wpdb<\/code> para almacenar los datos del formulario:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">function cf7_external_db_store_data($cf7) {\n    \/\/ Reemplaza con el ID de tu formulario de Contact Form 7\n    $target_form_id = 123;\n    \n    if ($cf7-&gt;id() == $target_form_id) {\n        $submission = WPCF7_Submission::get_instance();\n        $data = $submission-&gt;get_posted_data();\n\n        $name = isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '';\n        $email = isset($data['your-email']) ? sanitize_email($data['your-email']) : '';\n        $message = isset($data['your-message']) ? sanitize_textarea_field($data['your-message']) : '';\n\n        $wpdb_external = cf7_external_db_connect();\n\n        $result = $wpdb_external-&gt;insert(\n            'contact_form_entries',\n            array(\n                'name' =&gt; $name,\n                'email' =&gt; $email,\n                'message' =&gt; $message,\n                'submitted_at' =&gt; current_time('mysql', 1)\n            ),\n            array('%s', '%s', '%s', '%s')\n        );\n\n        if ($result === false) {\n            error_log('Error al insertar los datos en la base de datos externa: ' . $wpdb_external-&gt;last_error);\n        }\n    }\n}\nadd_action('wpcf7_before_send_mail', 'cf7_external_db_store_data');\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-4-probar-el-plugin\">Paso 4: Probar el plugin<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Navega al panel de administraci\u00f3n de WordPress y aseg\u00farate de que tu plugin est\u00e9 activado.<\/li>\n\n\n\n<li>Ve a la p\u00e1gina del formulario de contacto creado en Contact Form 7 y env\u00eda algunos datos de prueba.<\/li>\n\n\n\n<li>Verifica si los datos enviados se guardaron correctamente en la base de datos externa utilizando la clase <code>$wpdb<\/code>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"paso-4-probar-el-plugin\">C\u00f3digo Completo<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"php\" class=\"language-php\">&lt;?php\n\/*\nPlugin Name: Contact Form 7 - Base de datos externa\nPlugin URI: https:\/\/tusitio.com\/cf7-external-db\nDescription: Un plugin personalizado de WordPress para conectar Contact Form 7 con una base de datos externa.\nVersion: 1.0\nAuthor: Tu nombre\nAuthor URI: https:\/\/tusitio.com\nLicense: GPL2\n*\/\n\n\/\/ Reemplaza con los detalles de conexi\u00f3n de tu base de datos externa\ndefine('CF7_EXTERNAL_DB_HOST', 'tu_host');\ndefine('CF7_EXTERNAL_DB_USER', 'tu_usuario');\ndefine('CF7_EXTERNAL_DB_PASSWORD', 'tu_contrase\u00f1a');\ndefine('CF7_EXTERNAL_DB_NAME', 'tu_base_de_datos');\n\nfunction cf7_external_db_connect() {\n    global $wpdb;\n    \n    $wpdb_external = new wpdb(CF7_EXTERNAL_DB_USER, CF7_EXTERNAL_DB_PASSWORD, CF7_EXTERNAL_DB_NAME, CF7_EXTERNAL_DB_HOST);\n    $wpdb_external->set_prefix($wpdb->prefix);\n    return $wpdb_external;\n}\n\nfunction cf7_external_db_store_data($cf7) {\n    \/\/ Reemplaza con el ID de tu formulario de Contact Form 7\n    $target_form_id = 123;\n    \n    if ($cf7->id() == $target_form_id) {\n        $submission = WPCF7_Submission::get_instance();\n        $data = $submission->get_posted_data();\n\n        $name = isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '';\n        $email = isset($data['your-email']) ? sanitize_email($data['your-email']) : '';\n        $message = isset($data['your-message']) ? sanitize_textarea_field($data['your-message']) : '';\n\n        $wpdb_external = cf7_external_db_connect();\n\n        $result = $wpdb_external->insert(\n            'contact_form_entries',\n            array(\n                'name' => $name,\n                'email' => $email,\n                'message' => $message,\n                'submitted_at' => current_time('mysql', 1)\n            ),\n            array('%s', '%s', '%s', '%s')\n        );\n\n        if ($result === false) {\n            error_log('Error al insertar los datos en la base de datos externa: ' . $wpdb_external->last_error);\n        }\n    }\n}\nadd_action('wpcf7_before_send_mail', 'cf7_external_db_store_data');\n?><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora tienes un plugin personalizado de WordPress que utiliza la clase <code>$wpdb<\/code> para conectar Contact Form 7 con una base de datos externa y almacenar los datos enviados a trav\u00e9s del formulario. Puedes seguir personalizando este plugin seg\u00fan tus necesidades.<\/p>\n\n\n<style><\/style><style><\/style>\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<div class=\"wp-block-group is-layout-constrained wp-block-group-is-layout-constrained\">\n<h4 class=\"wp-block-heading has-large-font-size\" id=\"necesitas-ayuda-con-un-proyecto-web\">\u00bfNecesitas ayuda con un proyecto web?<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Si \u00bfNecesitas ayuda con alg\u00fan proyecto web? No dudes en contactarme desarrollo soluciones completas y personalizadas con WordPress y PHP, con herramientas y procesos modernos, utilizando HTML, CSS, SCSS, PHP, JavaScript, Bootstrap y m\u00e1s\u2026 Si \u00bfEst\u00e1s listo? \u00a1Env\u00edame un mensaje y hablemos de tu proyecto web!<\/p>\n\n\n<div class=\"wp-block-groundhogg-forms\">\n\t<div class=\"gh-form-wrapper\"><form method=\"post\" class=\"gh-form gh-form-v2\" target=\"_parent\" enctype=\"multipart\/form-data\" name=\"Formulario de Contacto\" id=\"gh-form-24\" data-id=\"24\"><div class=\"gh-form-fields\"><div class=\"gh-form-column col-1-of-2\"><label for=\"first_name\">Nombre <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"first_name\" id=\"first_name\" class=\"gh-input gh-first-name\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-2\"><label for=\"last_name\">Apellido(s) <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"last_name\" id=\"last_name\" class=\"gh-input gh-last-name\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"email\">Correo electr\u00f3nico <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"email\" name=\"email\" id=\"email\" class=\"gh-input gh-email\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"primary_phone\">Tel\u00e9fono o WhatsApp <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><input type=\"tel\" name=\"primary_phone\" id=\"primary_phone\" class=\"gh-input\" value=\"\" required\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"nombre_de_tu_negocio_o_empresa\">Nombre de tu Negocio o Empresa<\/label><div class=\"gh-form-input-field\"><input type=\"text\" name=\"nombre_de_tu_negocio_o_empresa\" id=\"nombre_de_tu_negocio_o_empresa\" class=\"gh-input\" value=\"\"\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"link_de_tu_pagina_web\">Link de tu pagina web<\/label><div class=\"gh-form-input-field\"><input type=\"url\" name=\"link_de_tu_pagina_web\" id=\"link_de_tu_pagina_web\" class=\"gh-input\" value=\"\" placeholder=\"Si tu negocio o empresa tiene p\u00e1gina web ingresa aqu\u00ed el link.\"\/><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"question_type\">\u00bfQu\u00e9 tipo de pregunta tienes? <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><select name=\"question_type\" id=\"question_type\" class=\"gh-input\" required><option value=\"Cotizaci\u00f3n\">Cotizaci\u00f3n<\/option><option value=\"General\">General<\/option><option value=\"Soporte\">Soporte<\/option><\/select><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><label for=\"message\">Pregunta <span class=\"required\">*<\/span><\/label><div class=\"gh-form-input-field\"><textarea name=\"message\" id=\"message\" class=\"gh-input\" rows=\"7\" placeholder=\"Tu pregunta o duda...\" type=\"text\" required><\/textarea><\/div><\/div><div class=\"gh-form-column col-1-of-1\"><div class=\"consent gh-gdpr\" id=\"gdpr_consent\"><div ><label class=\"gh-checkbox-label\"><input type=\"checkbox\" name=\"data_processing_consent\" id=\"data-processing-consent\" class=\"\" value=\"yes\" required\/><span class=\"checkbox-label\">I agree to racmanuel.dev&#8217;s storage and processing of my personal data. <span class=\"required\">*<\/span><\/span><\/label><\/div><div ><label class=\"gh-checkbox-label\"><input type=\"checkbox\" name=\"marketing_consent\" id=\"marketing-consent\" class=\"\" value=\"yes\"\/><span class=\"checkbox-label\">I agree to receive marketing offers and updates from racmanuel.dev.<\/span><\/label><\/div><\/div><\/div><div class=\"gh-form-column col-1-of-3\"><button type=\"submit\" class=\"gh-submit gh-button primary\" value=\"\">\u00a1P\u00f3ngase en contacto!<\/button><\/div><\/div><\/form><\/div><\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>En este tutorial, aprender\u00e1s a crear un plugin personalizado de WordPress que conecta el popular plugin Contact Form 7 con una base de datos externa a WordPress. Al final de este tutorial, tendr\u00e1s un plugin que guarda los datos enviados a trav\u00e9s de un formulario de contacto en una base de datos externa.<\/p>","protected":false},"author":1,"featured_media":2018,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_gspb_post_css":"","_glsr_average":0,"_glsr_ranking":0,"_glsr_reviews":0,"footnotes":""},"categories":[48],"tags":[42],"niveles":[39],"class_list":["post-1880","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriales","tag-wordpress","niveles-avanzado"],"blocksy_meta":[],"acf":[],"_links":{"self":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/1880","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/comments?post=1880"}],"version-history":[{"count":5,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/1880\/revisions"}],"predecessor-version":[{"id":2030,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/posts\/1880\/revisions\/2030"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media\/2018"}],"wp:attachment":[{"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/media?parent=1880"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/categories?post=1880"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/tags?post=1880"},{"taxonomy":"niveles","embeddable":true,"href":"https:\/\/racmanuel.dev\/en\/wp-json\/wp\/v2\/niveles?post=1880"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}