
En este tutorial, aprenderás 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ás un plugin que guarda los datos enviados a través de un formulario de contacto en una base de datos externa.

Preparación:
- Asegúrate de tener instalado y activado Contact Form 7 en tu sitio WordPress.
- Crea un formulario en Contact Form 7 y toma nota del ID del formulario que utilizarás en este tutorial.
Paso 1: Configurar el entorno de desarrollo
- En la carpeta wp-content/plugins de tu instalación de WordPress, crea una nueva carpeta llamada “cf7-external-db”.
- Dentro de esta carpeta, crea un archivo llamado “cf7-external-db.php” e incluye la siguiente información en la cabecera del archivo:
<?php
/*
Plugin Name: Contact Form 7 - Base de datos externa
Plugin URI: https://tusitio.com/cf7-external-db
Description: Un plugin personalizado de WordPress para conectar Contact Form 7 con una base de datos externa.
Version: 1.0
Author: Tu nombre
Author URI: https://tusitio.com
License: GPL2
*/
Paso 2: Establecer la conexión a la base de datos externa utilizando $wpdb
Añade las siguientes variables globales y la función de conexión en “cf7-external-db.php”:
// Reemplaza con los detalles de conexión de tu base de datos externa
define('CF7_EXTERNAL_DB_HOST', 'tu_host');
define('CF7_EXTERNAL_DB_USER', 'tu_usuario');
define('CF7_EXTERNAL_DB_PASSWORD', 'tu_contraseña');
define('CF7_EXTERNAL_DB_NAME', 'tu_base_de_datos');
function cf7_external_db_connect() {
global $wpdb;
$wpdb_external = new wpdb(CF7_EXTERNAL_DB_USER, CF7_EXTERNAL_DB_PASSWORD, CF7_EXTERNAL_DB_NAME, CF7_EXTERNAL_DB_HOST);
$wpdb_external->set_prefix($wpdb->prefix);
return $wpdb_external;
}
Paso 3: Enviar datos del formulario a la base de datos externa utilizando $wpdb
Reemplaza la función cf7_external_db_store_data
en “cf7-external-db.php” con la siguiente función que utiliza la clase $wpdb
para almacenar los datos del formulario:
function cf7_external_db_store_data($cf7) {
// Reemplaza con el ID de tu formulario de Contact Form 7
$target_form_id = 123;
if ($cf7->id() == $target_form_id) {
$submission = WPCF7_Submission::get_instance();
$data = $submission->get_posted_data();
$name = isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '';
$email = isset($data['your-email']) ? sanitize_email($data['your-email']) : '';
$message = isset($data['your-message']) ? sanitize_textarea_field($data['your-message']) : '';
$wpdb_external = cf7_external_db_connect();
$result = $wpdb_external->insert(
'contact_form_entries',
array(
'name' => $name,
'email' => $email,
'message' => $message,
'submitted_at' => current_time('mysql', 1)
),
array('%s', '%s', '%s', '%s')
);
if ($result === false) {
error_log('Error al insertar los datos en la base de datos externa: ' . $wpdb_external->last_error);
}
}
}
add_action('wpcf7_before_send_mail', 'cf7_external_db_store_data');
Paso 4: Probar el plugin
- Navega al panel de administración de WordPress y asegúrate de que tu plugin esté activado.
- Ve a la página del formulario de contacto creado en Contact Form 7 y envía algunos datos de prueba.
- Verifica si los datos enviados se guardaron correctamente en la base de datos externa utilizando la clase
$wpdb
.
Código Completo
<?php
/*
Plugin Name: Contact Form 7 - Base de datos externa
Plugin URI: https://tusitio.com/cf7-external-db
Description: Un plugin personalizado de WordPress para conectar Contact Form 7 con una base de datos externa.
Version: 1.0
Author: Tu nombre
Author URI: https://tusitio.com
License: GPL2
*/
// Reemplaza con los detalles de conexión de tu base de datos externa
define('CF7_EXTERNAL_DB_HOST', 'tu_host');
define('CF7_EXTERNAL_DB_USER', 'tu_usuario');
define('CF7_EXTERNAL_DB_PASSWORD', 'tu_contraseña');
define('CF7_EXTERNAL_DB_NAME', 'tu_base_de_datos');
function cf7_external_db_connect() {
global $wpdb;
$wpdb_external = new wpdb(CF7_EXTERNAL_DB_USER, CF7_EXTERNAL_DB_PASSWORD, CF7_EXTERNAL_DB_NAME, CF7_EXTERNAL_DB_HOST);
$wpdb_external->set_prefix($wpdb->prefix);
return $wpdb_external;
}
function cf7_external_db_store_data($cf7) {
// Reemplaza con el ID de tu formulario de Contact Form 7
$target_form_id = 123;
if ($cf7->id() == $target_form_id) {
$submission = WPCF7_Submission::get_instance();
$data = $submission->get_posted_data();
$name = isset($data['your-name']) ? sanitize_text_field($data['your-name']) : '';
$email = isset($data['your-email']) ? sanitize_email($data['your-email']) : '';
$message = isset($data['your-message']) ? sanitize_textarea_field($data['your-message']) : '';
$wpdb_external = cf7_external_db_connect();
$result = $wpdb_external->insert(
'contact_form_entries',
array(
'name' => $name,
'email' => $email,
'message' => $message,
'submitted_at' => current_time('mysql', 1)
),
array('%s', '%s', '%s', '%s')
);
if ($result === false) {
error_log('Error al insertar los datos en la base de datos externa: ' . $wpdb_external->last_error);
}
}
}
add_action('wpcf7_before_send_mail', 'cf7_external_db_store_data');
?>
Conclusion
Ahora tienes un plugin personalizado de WordPress que utiliza la clase $wpdb
para conectar Contact Form 7 con una base de datos externa y almacenar los datos enviados a través del formulario. Puedes seguir personalizando este plugin según tus necesidades.
¿Necesitas ayuda con un proyecto web?
Si ¿Necesitas ayuda con algún 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ás… Si ¿Estás listo? ¡Envíame un mensaje y hablemos de tu proyecto web!