Exportar tabla de WordPress a Excel

26 feb 2011, 05:19:48
Vistas: 18.1K
Votos: 3

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!

1
Comentarios

Después de una larga lucha esto me ayudó. Mira esto

Fungayi Makoni Fungayi Makoni
24 abr 2020 09:43:34
Todas las respuestas a la pregunta 5
0

¿Por qué no usar la sintaxis SELECT INTO OUTFILE:

$wpdb->query("SELECT * INTO OUTFILE '/ruta/al/archivo' 
 FIELDS TERMINATED BY '\t' 
 LINES TERMINATED BY '\n' 
 FROM tracking");
26 feb 2011 18:09:25
0

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;
?>
20 may 2011 12:04:09
3

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');
24 feb 2017 02:21:38
Comentarios

¿cómo obtener también los encabezados de las columnas?

Divyanshu Jimmy Divyanshu Jimmy
28 jun 2017 16:37:29

@Softxide, no estoy seguro de lo que quieres decir

Nuno Sarmento Nuno Sarmento
30 jun 2017 19:38:58

necesitaba los nombres de las columnas en el archivo csv volcado. Usé tu lógica y agregué los nombres de las columnas.. +1

Divyanshu Jimmy Divyanshu Jimmy
2 jul 2017 10:11:21
1

Si tienes phpmyadmin, simplemente ve a exportar y selecciona Excel en lugar de SQL.

26 feb 2011 07:59:26
Comentarios

Necesito ejecutar este código desde el front end de la aplicación, no desde el admin.

Rob Bennet Rob Bennet
26 feb 2011 08:43:01
0

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.

26 feb 2011 21:21:36