如何正确地做一个WordPress插件返回一个可下载的Excel文件
我正在尝试为我的wordpress插件做一些报告。 这个报告必须以excel的forms下载。 基本上我所做的是创build一个button,当按下button时,我将查询数据库,并从结果中获得一个excel。
现在我需要修改头文件以excel文件的forms返回结果。 这是我做到的:
header('Content-Disposition: attachment; filename='.$filename.'.xls'); header('Content-type: application/force-download'); header('Content-Transfer-Encoding: binary'); header('Pragma: public'); print "\xEF\xBB\xBF"; // UTF-8 BOM
问题是它返回以下错误:
Warning: Cannot modify header information - headers already sent by (output started at .....\wp-admin\menu-header.php:137)
我可能需要ob_start(),但不是ob_start()必须放在第一个标题(这是从WordPress的核心文件)之前。 如果可能,我不想修改核心文件。
或者也许WordPress的'自己的钩'send_headers'? 但我不能得到它的工作,它仍然产生相同的错误。
那么我需要解决这个问题呢? 是否有另一种方式来刷新wordpress插件的excel文件?
任何帮助感激!
由于header()已经在menu-header.php中发送,所以你发送的报头太晚了。 从提供的代码我不能看到你在哪个点发送标题,但是一个好的地方将在plugins_loaded行动,因为当所有的插件已经被加载,并且在任何输出被发送之前,该动作挂钩被调用。
下载链接可能如下所示:
<a href="<?php echo admin_url( '?download' ); ?>">download</a>
而且,plugins_loaded行动:
add_action( 'plugins_loaded', function() { if ( isset( $_GET['download'] ) ) { // here you can create .xls file header('Content-Disposition: attachment; filename='.$filename.'.xls'); header('Content-type: application/force-download'); header('Content-Transfer-Encoding: binary'); header('Pragma: public'); die(); } });