Я думаю, что $jsonDecoded = json_decode( json_encode($list), true);
бесполезен в вашем коде, вы преобразуете массив в строку JSON, а затем преобразуете его обратно в массив, лучше использовать $list
напрямую.
$fp
содержит ресурс, который является собственным типом PHP (см. В документе doc fopen тип возвращаемого значения resource
), и ресурс полностью отличается от строки, поэтому вы не можетеиспользуйте print $fp;
.
Мы могли бы использовать readfile для правильной отправки файла в браузер, вот решение:
function wpc_somename_search_callback( $request ) {
global $wpdb;
$date = $request['date'];
$query = "SELECT * FROM {$wpdb->prefix}tickets where inroute_id=16 and date='$date'";
$list = $wpdb->get_results($query);
$fileName = 'example.csv';
$fp = fopen($fileName, 'w');
foreach($list as $row){
fputcsv($fp, $row);
}
fclose($fp);
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'. $fileName .'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileName));
readfile($fileName);
exit;
}
Остерегайтесь инъекций SQL, используйте подготовленные запросы вместо.