2014-02-05 3 views
0

У меня возникли проблемы с созданием файла .csv и принудительной загрузкой внутри плагина wordpress.Загрузка файла силы внутри плагина wordpress

Если я вызываю этот код внутри плагина php, я получаю «не могу изменить заголовки», и я вызываю i из-за наружного wordpress, я могу загрузить .csv, но не могу включить wpdb.php (возможно, потому что я не знаю, t иметь доступ за пределами моей папки с плагинами)

<?php 
$fileName = 'somefile.csv'; 

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={$fileName}"); 
header("Expires: 0"); 
header("Pragma: public"); 

$fh = @fopen('php://output', 'w'); 

global $wpdb; 
$query = "SELECT nome, email FROM {$wpdb->prefix}coming_soon_lista_email"; 
$results = $wpdb->get_results($query, ARRAY_A); 
$headerDisplayed = false; 

foreach ($results as $data) { 
    if (!$headerDisplayed) { 
     fputcsv($fh, array_keys($data)); 
     $headerDisplayed = true; 
    } 
    fputcsv($fh, $data); 
} 
fclose($fh); 
exit; 
?> 

Что было бы лучшим подходом для этого случая?

ответ

0

Попробуйте это: -

<?php 

ob_start(); 
ob_clean(); 

$fileName = 'somefile.csv'; 

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={$fileName}"); 
header("Expires: 0"); 
header("Pragma: public"); 

$fh = @fopen('php://output', 'w'); 

global $wpdb; 
$query = "SELECT nome, email FROM {$wpdb->prefix}coming_soon_lista_email"; 
$results = $wpdb->get_results($query, ARRAY_A); 
$headerDisplayed = false; 

foreach (unserialize($_GET['asd']) as $data) { 
    if (!$headerDisplayed) { 
     fputcsv($fh, array_keys($data)); 
     $headerDisplayed = true; 
    } 
    fputcsv($fh, $data); 
} 
fclose($fh); 
exit; 
?> 
+0

это не сработало = ('Невозможно изменить информацию заголовка - уже отправленные заголовки (вывод начат в wp-admin \ menu-header.php: 107' – ghaschel

+0

чем удалить' ob_start(); 'из этого файла и добавить' ob_start(); 'в ваш файл' wp-config.php' ... –

+0

Мне не нужно редактировать wp-config, так как он будет использоваться для более чем одного wordpress copy ... – ghaschel

0

У меня была такая же проблема при создании моего Wordpress plugin. Я решил это, имея инструкцию if в конструкторе моего плагина, который прерывал бы и выводил бы csv.

Это то, что я сделал для моего

function __construct(){ 
    if($_GET['export'] == true && $_GET['page'] == 'cwd-management' && is_admin()) 
    { 
     $csv = ''; 
     foreach ($this->getAll() as $row) { // getAll() just returns all data in a custom table 
      $csv .= $row->ref . "," . $row->data . "\n"; 
     } 

     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Cache-Control: private", false); 
     header("Content-Type: application/octet-stream"); 
     header("Content-Disposition: attachment; filename=\"cwd-export_" . date("Y-m-d_H-i-s") . ".csv\";"); 
     header("Content-Transfer-Encoding: binary"); 

     echo $csv; 
     exit; 
    } 
} 

Не зная структуры таблицы, я не могу дать полный пример, но, надеюсь, вы можете использовать мой код, чтобы добавить в свой класс плагина. Затем просто укажите ссылку, которая соответствует статусу if

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