Este artículo es una continuación Formulario de contacto (Hidrotecno), que debes haberlo leído, antes de continuar.
Lo primero que debemos hacer es instalar el plugins php spread sheet, el cual nos ayudará a convertir los Custom Post a tablas de excel (Lo descargamos desde anexos) y lo instalamos.




Cosa a tener en cuenta en el código
La variable $post_type contiene el nombre de post type que queremos pasar a Excel

Todos los nombres de las funciones y el texto que verá el usuario, deben hacer referencia al post type.



Al momento de crear el nombre del archivo excel requerimos la fecha, esta debería ser la hora del país de donde es el cliente, en este caso usamos la hora de la ciudad de México, ya que el proyecto es de este lugar.

Estos son los nombres de los encabezados de las columnas, debes asegurarte que los nombres correspondan a los datos reales.

Descargar archivo con los Post
Si todo sale bien, podremos descargar el archivo de Excel con los datos de los formularios o de cualquier clase de post.



Archivos Usados
1.
contact-to-excel.php
PHP
wp-content/themes/depura_theme/functions/utils/
Setting
contact-to-excel.php
PHP
wp-content/themes/depura_theme/functions/utils/
Setting
<?php
function generar_contact_excel_page()
{
//Variables
$post_type = 'post_contact';
// Incluir PhpSpreadSheet
require_once(CBXPHPSPREADSHEET_ROOT_PATH . 'lib/vendor/autoload.php');
// Crear una instancia del objeto Spreadsheet
global $wp_filesystem;
WP_Filesystem();
$content_directory = $wp_filesystem->wp_content_dir() . 'uploads/excel/';
$wp_filesystem->mkdir($content_directory);
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
// Eliminar todos los archivos en la carpeta
$files = glob($content_directory . 'contact*');
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
// Obtener los datos del custom post type
$args = array(
'post_type' => $post_type,
'posts_per_page' => -1,
);
$query = new WP_Query($args);
$posts = $query->get_posts();
// Crear una hoja de cálculo y agregar los datos
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Título');
$sheet->setCellValue('B1', 'Asunto');
$sheet->setCellValue('C1', 'Nombre');
$sheet->setCellValue('D1', 'Correo');
$sheet->setCellValue('E1', 'Mensaje');
foreach ($posts as $post_index => $post) {
$sheet->setCellValue('A' . ($post_index + 2), $post->post_title);
$lines = explode("\n", $post->post_content);
foreach ($posts as $post_index => $post) {
$sheet->setCellValue('A' . ($post_index + 2), $post->post_title);
$lines = explode("\n", $post->post_content);
foreach ($lines as $line_index => $line) {
$parts = explode(':', $line, 2);
$value = count($parts) === 2 ? trim($parts[1], ";\r"): trim($parts[0], ";\r");
$column = $line_index + 2;
$sheet->setCellValueByColumnAndRow($column, ($post_index + 2), $value);
}
}
}
date_default_timezone_set('America/Mexico_City');
$filename = 'contact_' . date('Ymd_His',) . '.xlsx';
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($content_directory . $filename);
?>
<div style="margin: 60px;">
<a href="<?php echo get_home_url() . '/wp-content/uploads/excel/' . $filename ?>">
Descargar Contact en Excel
</a>
</div>
<?php
}
function agregar_menu_generar_contact_excel()
{
add_menu_page('Descargar Contact Excel', 'Descargar Contact Excel', 'manage_options', 'generar_contact_excel_page', 'generar_contact_excel_page');
}
add_action('admin_menu', 'agregar_menu_generar_contact_excel');