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.
Suscripción al Newsletter
Si estás interesado en aprender más sobre WordPress, no olvides suscribirte a nuestro blog para recibir las últimas noticias y consejos sobre WordPress, alojamiento web.
¿Necesitas un Hosting para tu Web?
¿Necesitas ayuda con un Proyecto Web o un Plugin a Medida?
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!