Я использую Ajax с WordPress для экспорта ZIP-файла. Этот код работает хорошо, однако он загружает zip-файл в 2 разных местах: на моем рабочем столе (в качестве места загрузки браузера по умолчанию) и в моем каталоге wordpress / wp-admin, где работает этот код плагина. Я не хочу загружать его в папку wp-admin, как я могу это предотвратить?
//ajax
$('.btn').on('click', function(){
var postData = [
{name: 'action', value: 'foo_export_playlist'},
{name: 'playlist_id', value: playlist_id},
{name: 'playlist_title', value: playlist_title}
];
$.ajax({
url: ajax_url,
type: 'post',
data: postData,
dataType: 'json',
}).done(function(response){
if(response.zip) {
location.href = response.zip;
}
}).fail(function(jqXHR, textStatus, errorThrown) {
console.log(jqXHR.responseText, textStatus, errorThrown);
});
return false;
});
//php
function foo_export_playlist(){
// create zip file
$zipname = 'foo.zip';
$zip = new ZipArchive;
$zip->open($zipname, ZipArchive::CREATE);
// create a temporary file
$size = 1 * 1024 * 1024;
$fp = fopen('php://temp/maxmemory:$size', 'w');
if (false === $fp) {
die('Failed to create temporary file');
}
$stmt = $wpdb->prepare("SELECT * FROM {$media_table} WHERE playlist_id = %d", $playlist_id);
$result = $wpdb->get_results($stmt, ARRAY_A);
foreach($result as $row){
$trimmed_array = array_map('trim',array_values($row));
$line = str_replace('^', '', $trimmed_array);
fputcsv($fp, $line, '|','^');
}
// return to the start of the stream
rewind($fp);
// add the in-memory file to the archive, giving a name
$zip->addFromString($table.'.csv', stream_get_contents($fp) );
//close the file
fclose($fp);
$zip->close();
echo json_encode(array('zip' => $zipname));
wp_die();
}