WordPressでCSVファイルにデータを吐き出してダウンロードさせる処理をさせたい場合、CSVのダウンロードを開始させるタイミングを調節してあげないと、「header already sent...」のエラーがでてしまう。
'init'
アクションフックなどの、HTMLヘッダーが出力される前のタイミングにフックさせてあげるとエラーを回避できる。
例:'init'
アクションフックでCSVファイルのダウンロードを実行させる
add_action('init', function(){
/* ...CSVファイルの生成・準備など... */
// ファイルタイプを指定
header('Content-Type: application/octet-stream');
// ファイルのダウンロード、リネームを指示
header('Content-Disposition: attachment; filename="CSVファイル名"');
// ファイルサイズを取得し、ダウンロードの進捗を表示
header('Content-Length: '. filesize( $csv_path ) );
// ファイルを読み込みダウンロードを実行
readfile( $csv_path );
// ダウンロードさせるためにサーバーにおいた一時ファイルの削除
unlink( $csv_path );
exit();
});
コメント