我正在开发一个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文件,但之后它会发布整个wp_admin php明文,使文件损坏。我假设Wordpress在某个地方这样做,但我还没有找到方法。我很感激任何帮助!
除此之外,我想知道为什么我的页面正在工作,而我添加到admin_init的功能缺少退出语句(为什么不是所有其他代码都被推了?)。当它包含退出语句时,我在加载任何管理页面时都有一个白屏。
谢谢!
答案 0 :(得分:2)
我通过将exit语句放在if语句中来修复它。我之前删除了它,因为它打破了页面,没有意识到在if语句之外Wordpress退出了。
答案 1 :(得分:0)
$writer->save('php://output');
- 应该有文件名,例如:
$writer->save('hello world.xlsx');