Exportar tabla de WordPress a Excel
He creado scripts PHP anteriormente para exportar una tabla de base de datos a formato .xls como este:
$select = "SELECT * FROM tracking";
$export = mysql_query ( $select ) or die ( "Sql error : " . mysql_error( ) );
$fields = mysql_num_fields ( $export );
$file = 'export';
for ( $i = 0; $i < $fields; $i++ )
{
$header .= mysql_field_name( $export , $i ) . "\t";
}
while( $row = mysql_fetch_row( $export ) )
{
$line = '';
foreach( $row as $value )
{
if ( ( !isset( $value ) ) || ( $value == "" ) )
{
$value = "\t";
}
else
{
$value = str_replace( '"' , '""' , $value );
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim( $line ) . "\n";
}
$data = str_replace( "\r" , "" , $data );
if ( $data == "" )
{
$data = "\n(0) Records Found!\n";
}
$filename = $file."_".date("M-d-Y");
header("Content-type: application/octet-stream");
header( "Content-disposition: filename=".$filename.".xls");
header("Pragma: no-cache");
header("Expires: 0");
print "$header\n$data";
Lo que me gustaría saber es cómo "convertir" esto al formato de WordPress usando la clase $wpdb? Puedo hacer la consulta inicial para seleccionar los datos de la tabla que quiero, pero me pierdo en algunas de las semánticas de la clase wpdb. También quería saber dónde colocar este código en WordPress, para que cuando un usuario haga clic en un enlace, ejecute esta consulta y descargue el archivo .xls?
¡Cualquier ayuda es muy apreciada! ¡Este sitio es genial!

crea esto como un archivo 'export_data.php'. Luego llama a este php desde el enlace
<?php
$host = 'localhost';
$user = 'mysqlUser';
$pass = 'myUserPass';
$db = 'myDatabase';
$table = 'products_info';
$file = 'export';
// Conectar a la base de datos
$link = mysql_connect($host, $user, $pass) or die("No se puede conectar." . mysql_error());
mysql_select_db($db) or die("No se puede conectar a la base de datos.");
// Obtener nombres de columnas
$result = mysql_query("SHOW COLUMNS FROM ".$table."");
$i = 0;
if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field']."; ";
$i++;
}
}
$csv_output .= "\n";
// Obtener datos de la tabla
$values = mysql_query("SELECT * FROM ".$table."");
while ($rowr = mysql_fetch_row($values)) {
for ($j=0;$j<$i;$j++) {
$csv_output .= $rowr[$j]."; ";
}
$csv_output .= "\n";
}
// Configurar headers para descarga
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
?>

Definitivamente llego tarde para ayudar con mi respuesta.. ¡espero! :) , pero estoy dirigiendo esto a cualquier otra persona que necesite una función actualizada de WordPress para exportar una tabla personalizada a un archivo CSV limpio y ordenado en filas
function ns_contact_form_csv_pull() {
global $wpdb;
$table = 'ns_contact_form';// nombre de la tabla
$file = 'ns_contact_form_csv'; // nombre del archivo csv
$results = $wpdb->get_results("SELECT * FROM $wpdb->prefix$table",ARRAY_A );
if(count($results) > 0){
foreach($results as $result){
$result = array_values($result);
$result = implode(", ", $result);
$csv_output .= $result."\n";
}
}
$filename = $file."_".date("Y-m-d_H-i",time());
header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=".$filename.".csv");
print $csv_output;
exit;
}
add_action('wp_ajax_csv_pull','ns_contact_form_csv_pull');
Descarga el CSV (necesitas estar logueado) solo añade esta URL en tu navegador http://example.com/wp-admin/admin-ajax.php?action=csv_pull
... cambia el dominio por el tuyo :)
Puedes llamarlo en cualquier parte de WordPress usando:
$ajax_url = admin_url('admin-ajax.php?action=csv_pull');

Algo como esto:
$results = $wpdb->get_results('SELECT * FROM tracking;');
Consulta Selección de resultados genéricos en el Codex para más detalles.
No estoy seguro de cuál es la mejor forma de implementar el enlace a esto, una página con una plantilla personalizada podría ser la solución.
