我有一些代码,是通过自定义插件中的一个短代码实现的。代码从一些数据表生成CSV文件。当我在admin部分中运行shortcode时,它工作得非常好。但当我尝试在前端运行它时,它会在CSV文件的顶部填充页面HTML数据,例如:
<?DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
.......
# ID Product Price
1 2a keys 10.00
2 2b doors 55.00
数据表会像插件的管理部分一样导出。当函数的短代码放在前端时,结果是文件顶部的HTML代码(如上所示)。我一辈子都想不出怎么阻止这一切。目标是能够让用户以CSV格式输出其所有购买内容。代码如下:
function ShowResults($Name)
{
$rows = mmd_GetProducts($Name);
ob_start();
ob_end_flush();
header(\'Pragma: public\');
header( \'Expires: 0\' );
header( \'Cache-Control: private\', false );
header( \'Content-Type: text/csv\');
header( \'Content-Disposition: attachment; filename="\'. \'Results.csv"\');
$fp = fopen(\'php://output\', \'w\');
$header_row = array(
0 => \'#\',
1 => \'ID\',
2 => \'Product\',
3 => \'Price\',
);
fputcsv($fp, $header_row);
foreach($rows as $Record)
{
if($Record[\'bDoNotDisplay\'] == 1 )
continue;
$OutputRecord = array($cnt
$Record[\'id\'],
$Record[\'product\'],
$Record[\'price\']);
$cnt ++;
fputcsv($fp, $OutputRecord);
}
unset($rows);
fclose( $fp );
ob_end_clean();
exit();
}
更新但仍然存在问题
类似的问题,只是现在HTML代码位于文件的底部。我将代码更改为使用add\\u操作,而不是调用短代码。我使用这个wordpress操作调用,然后检测这是否是正在加载的页面
add_action( \'template_redirect\', \'ShowResults\', 10);
function ShowResults()
{
global $post;
$title = get_the_title($post);
if($title == "Export")
{
OutputCSV();
}
}
function OutputCSV()
{
$rows = mmd_GetProducts($Name);
ob_start();
ob_end_flush();
header(\'Pragma: public\');
header( \'Expires: 0\' );
header( \'Cache-Control: private\', false );
header( \'Content-Type: text/csv\');
header( \'Content-Disposition: attachment; filename="\'. \'Results.csv"\');
$fp = fopen(\'php://output\', \'w\');
$header_row = array(
0 => \'#\',
1 => \'ID\',
2 => \'Product\',
3 => \'Price\',
);
fputcsv($fp, $header_row);
foreach($rows as $Record)
{
if($Record[\'bDoNotDisplay\'] == 1 )
continue;
$OutputRecord = array($cnt
$Record[\'id\'],
$Record[\'product\'],
$Record[\'price\']);
$cnt ++;
fputcsv($fp, $OutputRecord);
}
unset($rows);
fclose( $fp );
ob_end_clean();
exit();
}
现在HTML代码显示在文件的底部,而不是顶部。有什么建议吗?