Excel — PHPSpreadsheet в WordPress генерирует поврежденные файлы с открытым текстом Переполнение стека

Я разрабатываю плагин для WordPress и пытаюсь создать кнопку для экспорта в Excel. Я пытался найти идеальный метод WordPress для этого, и до сих пор я придумал это. Это кнопка:

<form method="post" action="">
<input type="submit" name="export_excel"  value="Maak een Excel export" class="button-primary"/>
</form>

И это функция, которую я подключил к admin_init.

add_action("admin_init", "export_excel");


function export_excel() {

if (isset($_POST['export_excel'])) {


try {
$filename = 'test.xlsx';

ob_clean();
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/vnd.ms-excel' );
header( 'Content-Disposition: attachment;filename=' . $filename );

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
ob_flush();

} catch (\PhpOffice\PhpSpreadsheet\Exception $e) {
}
}

}

Когда я нажимаю кнопку, файл корректно загружается в файл Excel, но после этого он публикует весь текст php wp_admin, делая файл поврежденным. Я предполагаю, что WordPress делает это где-то, но я не смог выяснить, как. Буду признателен за любую помощь в этом!

Кроме того, мне было интересно, почему моя страница работала, в то время как в моей функции, добавленной в admin_init, отсутствует оператор выхода (почему не весь другой код сдвинут?). Я получил белый экран при загрузке любой страницы администратора, когда она содержала оператор выхода.

Спасибо!

1

Решение

Я исправил это, поместив оператор выхода в оператор if. Я удалил его раньше, потому что он ломал страницу, не понимая, что вне оператора if WordPress выходит из себя.

2

Другие решения

$writer->save('php://output'); — должно быть имя файла, например:
$writer->save('hello world.xlsx');

0

По вопросам рекламы [email protected]