如何在Wordpress中下载导出的csv文件

Mak*_*sym 5 php csv wordpress http-headers export-to-csv

我在wp-admin/side创建菜单的插件上工作,并显示包含一些数据的表.我需要生成CSV(它是正确的)并让用户自动下载它.我知道,我必须添加这些标题

header('Content-type: application/csv');
header('Content-Disposition: attachment; filename="' . $csv_file_name . '"');
Run Code Online (Sandbox Code Playgroud)

但不幸的是,它不适用于wordpress管理员端.再次 - 生成CSV是正确的,但它只显示表下方的csv文件的文本,但不提供文件

这是完整的代码

if ( isset( $_REQUEST['export_csv'] ) ) {
        global $wpdb;
        $csv_source_array = $wpdb->get_results ( $wpdb->prepare( " SELECT name, email, time, text FROM {$table_name} " ), ARRAY_N );
        $csv_file_name = 'nba.rally.'.date(Ymd).'.csv';
        $csv_header_array = array( "Name", "Email", "Date", "Message" );        

            if (isset($csv_source_array)) {

                header('Content-type: application/csv');
                header('Content-Disposition: attachment; filename="' . $csv_file_name . '"');

            ob_start();
                $f = fopen('php://output', 'w') or show_error("Can't open php://output");
                $n = 0;


                    if (isset($csv_header_array)) {
                        if ( !fputcsv($f, $csv_header_array, ';'))
                        {
                            echo "Can't write line $n: $line";
                        }
                    }

                foreach ($csv_source_array as $line)
                {
                    $n++;

                    if ( !fputcsv($f, $line, ';'))
                    {
                        echo "Can't write line $n: $line";
                    }
                }
                fclose($f) or show_error("Can't close php://output");
                $csvStr = ob_get_contents();
                ob_end_clean();

                echo $csvStr;
            }


        }   
Run Code Online (Sandbox Code Playgroud)

感谢您提出任何答案.

Mak*_*sym 2

我已经修好了。

我已将该代码插入到插件的顶部。

我认为因为标题应该在脚本的头部以及加载文档之前或标记之后发送。

笔记:

HTTP 状态标头行将始终是第一个发送到客户端的,无论实际的 header() 调用是否是第一个。除非已经发送了 HTTP 标头,否则可以随时通过使用新状态行调用 header() 来覆盖状态。

来自php.net/manual/en/function.header.php