Я разрабатываю плагин для 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, отсутствует оператор выхода (почему не весь другой код сдвинут?). Я получил белый экран при загрузке любой страницы администратора, когда она содержала оператор выхода.
Спасибо!
Я исправил это, поместив оператор выхода в оператор if. Я удалил его раньше, потому что он ломал страницу, не понимая, что вне оператора if WordPress выходит из себя.
$writer->save('php://output');
— должно быть имя файла, например:
$writer->save('hello world.xlsx');