2011-11-11 34 views
5

Tôi làm việc trên plugin tạo trình đơn trong wp-admin/side và hiển thị bảng với một số dữ liệu. Tôi cần phải tạo CSV (nó sẽ chính xác) và cung cấp cho người dùng để donwload nó tự động. Tôi biết rằng tôi phải thêm các tiêu đề như thế nàyCách tải xuống tệp csv đã xuất trong Wordpress

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

Nhưng tiếc là nó không hoạt động đối với phía quản trị wordpress. Một lần nữa - tạo của CSV đang xảy ra chính xác, nhưng nó sẽ hiển thị chỉ là một nội dung của tập tin csv bên dưới bảng, nhưng không cung cấp cho các tập tin

Đây là mã đầy đủ

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; 
      } 


     } 

Cám ơn một bước tiến cho bất kỳ câu trả lời nào.

Trả lời

2

Tôi đã sửa nó.

Tôi đã chèn mã đó vào đầu plugin.

Tôi nghĩ rằng vì tiêu đề phải gửi trên phần đầu tập lệnh và trước khi tải tài liệu hoặc sau thẻ.

Lưu ý:

Các HTTP dòng tiêu đề trạng thái sẽ luôn là người đầu tiên gửi cho khách hàng, không phụ thuộc vào thực tế header() gọi là người đầu tiên hay không. Trạng thái có thể bị ghi đè bằng cách gọi tiêu đề() với dòng trạng thái mới bất kỳ lúc nào trừ khi các tiêu đề HTTP đã được gửi.

từ

+0

bạn có thể cho tôi mã đầy đủ? – huykon225

Các vấn đề liên quan