5

私はwp-admin/側でメニューを作成し、いくつかのデータを含むテーブルを表示するプラグインに取り組んでいます。CSVを生成し(正しく実行されます)、ユーザーに自動的にダウンロードするように指示する必要があります。私はこれらのようなヘッダーを追加する必要があることを知っています

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

しかし残念ながら、それはワードプレスの管理者側では機能しません。繰り返しますが、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;
            }


        }   

回答をお寄せいただきありがとうございます。

4

1 に答える 1

2

修正しました。

プラグインの上部にそのコードを挿入しました。

ヘッダーはスクリプトの先頭で、ドキュメントをロードする前、またはタグの後に送信する必要があるためだと思います。

ノート:

HTTPステータスヘッダー行は、実際のheader()呼び出しが最初であるかどうかに関係なく、常に最初にクライアントに送信されます。HTTPヘッダーがすでに送信されていない限り、いつでも新しいステータス行でheader()を呼び出すことにより、ステータスをオーバーライドできます。

php.net/manual/en/function.header.phpから

于 2011-11-11T09:54:16.773 に答える