Cuando usamos WP All Import para importar datos en una instalación de WordPress es habitual que el archivo a utilizar contenga un gran número de registros, lo que se traduce en que todo el proceso de sincronización puede llevarnos horas. Es por eso que puede resultarnos interesante recibir por correo un aviso con el resultado de la importación cuando termine.
En este momento desde el panel de gestión no disponemos ninguna opción que nos permita activar los avisos, sin embargo sí que podemos usar el editor de funciones del propio plugin para incorporar este nuevo añadido. El propio WP All Import nos proporciona un script en su documentación técnica para esto el cual he modificado ligeramente y que vamos a ver con detenimiento:
function wpai_send_email($import_id){
// Solo envía el email si el ID de la importación es 1
if($import_id != "1")
return;
// Recupera las estadísticas de la última ejecución
global $wpdb;
$table = $wpdb->prefix . "pmxi_imports";
if ( $soflyyrow = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM `" . $table . "` WHERE `id` = '%d'", $import_id ) ) ) {
$count = $soflyyrow->count;
$imported = $soflyyrow->imported;
$created = $soflyyrow->created;
$updated = $soflyyrow->updated;
$skipped = $soflyyrow->skipped;
$deleted = $soflyyrow->deleted;
}
// Email de destino
$to = 'email@destino.com';
// Asunto del email
$subject = 'Importación: '.$import_id.' completada';
// Cuerpo de mensaje del email
$body = 'Importación con ID '.$import_id.' ha sido completada en fecha '. date("Y-m-d H:m:s").'<br>';
$body .= 'Registros del archivo:'.$count.'<br>';
$body .= 'Registros importados:'.$imported.'<br>';
$body .= 'Registros creados:'.$created.'<br>';
$body .= 'Registros actualizados:'. $updated .'<br>';
$body .= 'Registros omitidos:' . $skipped .'br>';
$body .= 'Registros borrados:' . $deleted;
}
add_action('pmxi_after_xml_import', 'wpai_send_email', 10, 1);
En el ejemplo anterior podemos ver una función (function wpai_send_email($import_id)) a la que se le pasa el ID de la importación actual. Justo dentro lo primero que nos encontramos es un condicional en el que se se usa ese ID de la importación para cotejar si es el 1 y de no ser así, sale de la función y no ejecuta el resto. Si bien esto puede resultar interesante para solo recibir el correo con importaciones muy concretas que tengamos programadas, podemos quitarlo completamente y entonces se mandará siempre que se ejecute una importación.
if($import_id != "1")
return;
A continuación se extraen los datos del informe de la base de datos y se asignan después individualmente en diferentes variables para poder usarlas en el email.
global $wpdb;
$table = $wpdb->prefix . "pmxi_imports";
if ( $soflyyrow = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM `" . $table . "` WHERE `id` = '%d'", $import_id ) ) ) {
$count = $soflyyrow->count;
$imported = $soflyyrow->imported;
$created = $soflyyrow->created;
$updated = $soflyyrow->updated;
$skipped = $soflyyrow->skipped;
$deleted = $soflyyrow->deleted;
}
La siguiente parte de la función lo que hace es montar las diferentes partes del email y ahí usar esos datos extraídos. Tras eso se utiliza la función wp_mail de WordPress y se manda el correo con los datos anteriores.
$to = 'email@destino.com'';
$subject = 'Import ID: '.$import_id.' complete';
$body = 'Importación con ID '.$import_id.' ha sido completada en fecha '. date("Y-m-d H:m:s").'<br>';
$body .= 'Registros del archivo:'.$count.'<br>';
$body .= 'Registros importados:'.$imported.'<br>';
$body .= 'Registros creados:'.$created.'<br>';
$body .= 'Registros actualizados:'. $updated .'<br>';
$body .= 'Registros omitidos:' . $skipped .'br>';
$body .= 'Registros borrados:' . $deleted;
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
Finalmente usamos el hook add_action('pmxi_after_xml_import', 'wpai_send_email', 10, 1) para ejecutar la función justo después de que se haya producido la importación. Y listo, tras esto es destinatario debería recibir un email con toda la información aportada.
Todo este script es personalizable de modo que puedes adaptarlo a tu criterio.
Referencias:
- Enviar email después de que se haya completado la importación (inglés) – Documentación de WP All Import
- Función wp_mail (inglés) – WordPress DEvelopers Resources
- Hook pmxi_after_xml_import (inglés) – Documentación de WP All Import






Deja una respuesta