2

我正在开发一个 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 的函数缺少 exit 语句(为什么不推所有其他代码?)。当它确实包含退出语句​​时,我在加载任何管理页面时都会出现白屏。

谢谢!

4

2 回答 2

2

我已经通过将 exit 语句放在 if 语句中来修复它。我之前删除了它,因为它破坏了页面,没有意识到 if 语句之外 Wordpress 会自行退出。

于 2018-04-11T08:34:44.840 回答
-1

$writer->save('php://output');- 应该有文件名,例如: $writer->save('hello world.xlsx');

于 2018-04-11T07:53:52.697 回答