在我们的一个 WordPress 页面上,我们想通过浏览器下载一个文件。据我所知,这是通过修改标题来完成的,因此页面认为它是某种类型的文件(例如.txt)。但是,在此页面加载之前加载了主题以及数十个插件,其中许多正在输出某种数据,或者以某种方式修改标题,我经常收到臭名昭著的标题错误:
那么,我怎么可能绕过其他插件在我想要之前修改 header 信息的事实?当然必须有某种方式,因为其他插件彼此之间没有这个问题。
对于那些喜欢看到某种努力的人,这是我正在使用的代码:
$tmp_handle = fopen('php://memory', 'r+');
foreach ($arr as $fields) {
fputcsv($tmp_handle, $fields);
}
header('Content-type: text/csv');
header('Content-disposition: attachment;filename=MyVerySpecial.csv');
rewind($tmp_handle);
echo stream_get_contents($tmp_handle);
我真的很感激在这个问题上的一些帮助,谢谢!
最佳答案
如果您只想让用户下载一些东西,那么您就不需要使用模板系统。您肯定知道在“template_redirect”之前没有输出任何内容,因此您可以使用此事实来编写如下内容:
add_action('template_redirect', 'download_page');
function download_page() {
if($_GET['download'] == 'true') {
//Output header information and the file content
exit; // Stops Wordpress from executing anything else.
}
}
现在也许您确实需要模板系统来交付文件,我不知道,但是您的描述没有具体说明这一点。
关于php - 当标题已经在以前的文件中发送时,如何更改标题以在 WordPress 中下载文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9012504/