2016-01-14 4 views
0

Im пытается экспортировать данные из массового действия в пользовательский класс WP_List_Table. У меня есть следующая функция для экспорта данных, но я получаю «заголовки уже отправленные» ошибки все время, когда я хочу экспортировать данные. Не могли бы вы указать, что я делаю неправильно?Экспорт CSV-файла из пользовательского класса WP_List_Table

public static function export_mailings ($data) { 

    if (!current_user_can('manage_options')) { 
     return; 
    } 

    global $wpdb; 
    $filename = 'mailings-' . date('d-M-Y') . '.csv'; 

    $sql = "SELECT * FROM {$wpdb->prefix}wpsml WHERE `id` IN (" . implode(',', array_map('intval', $data)) . ")"; 
    $results = $wpdb->get_results($sql); 

    $csv_headers = array(); 
    $csv_headers[] = 'Date'; 
    $csv_headers[] = 'Name'; 
    $csv_headers[] = 'Email'; 

    $filename = 'export' . date('d-M-Y'); 
    $output_handle = fopen('php://output', 'w'); 

    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Content-Description: File Transfer'); 
    header('Content-type: text/csv'); 
    header('Content-Disposition: attachment; filename=' . $output_filename); 
    header('Expires: 0'); 
    header('Pragma: public'); 

    fputcsv($output_handle, $csv_headers); 

    foreach ($results as $result) { 
     fputcsv($output_handle, (array)$result); 
    } 

    fclose($output_handle); 
    die(); 
} 
+0

Вы проверили print_r ($ results); ? вы получаете данные или пустой массив? –

+0

Wel, я на самом деле получаю полный вывод при ошибках. Проблема в том, что этот вывод не загружается как файл, вызывающий ошибку заголовков (я предполагаю). – mkolodziejczak

ответ

0

Похоже, вы вызываете эту функцию слишком поздно, после вывода некоторых данных. Попробуйте закреплять в init:

function yourfunction() { 
    dosomething(); 
} 
add_action('init', yourfunction); 

Полный справочник можно найти here.

+0

Это метод класса WP_List_Table, он запускается, когда действие «экспорт» запускается из объемных действий, выбранных на этой странице администрирования. – mkolodziejczak

+0

@szamantg Ну, может быть, некоторые из этого могут вам помочь: http://stackoverflow.com/questions/8028957/how-to-fix-headers-already-sent-error-in-php –

Смежные вопросы