2011-11-11 18 views
5

Trabajo en el complemento que crea el menú en wp-admin/side y muestra la tabla con algunos datos. Necesito generar CSV (está funcionando correctamente) y dar al usuario la descarga automática. Yo sé que tengo que añadir las cabeceras como estosCómo descargar un archivo csv exportado en Wordpress

header('Content-type: application/csv'); 
header('Content-Disposition: attachment; filename="' . $csv_file_name . '"'); 

Pero, por desgracia no funciona para la parte de administración de WordPress. Una vez más - la generación de CSV va correcta, pero muestra sólo un texto de archivo csv por debajo de la mesa, pero no dan el archivo

Aquí está el código completo

if (isset($_REQUEST['export_csv'])) { 
     global $wpdb; 
     $csv_source_array = $wpdb->get_results ($wpdb->prepare(" SELECT name, email, time, text FROM {$table_name} "), ARRAY_N); 
     $csv_file_name = 'nba.rally.'.date(Ymd).'.csv'; 
     $csv_header_array = array("Name", "Email", "Date", "Message");   

      if (isset($csv_source_array)) { 

       header('Content-type: application/csv'); 
       header('Content-Disposition: attachment; filename="' . $csv_file_name . '"'); 

      ob_start(); 
       $f = fopen('php://output', 'w') or show_error("Can't open php://output"); 
       $n = 0; 


        if (isset($csv_header_array)) { 
         if (!fputcsv($f, $csv_header_array, ';')) 
         { 
          echo "Can't write line $n: $line"; 
         } 
        } 

       foreach ($csv_source_array as $line) 
       { 
        $n++; 

        if (!fputcsv($f, $line, ';')) 
        { 
         echo "Can't write line $n: $line"; 
        } 
       } 
       fclose($f) or show_error("Can't close php://output"); 
       $csvStr = ob_get_contents(); 
       ob_end_clean(); 

       echo $csvStr; 
      } 


     } 

Gracias por un avance por cualquier respuesta

Respuesta

2

Lo he arreglado.

He insertado ese código en la parte superior del complemento.

Creo que porque los encabezados deben enviarse en el encabezado del script y antes de cargar el documento o después de la etiqueta.

Nota:

La línea de cabecera de estado HTTP siempre será el primero se envía al cliente, con independencia de la llamada a header() siendo el primero o no. El estado puede anularse llamando al encabezado() con una nueva línea de estado en cualquier momento a menos que los encabezados HTTP ya hayan sido enviados.

de

+0

puede darme código completo? – huykon225

Cuestiones relacionadas