2017-05-12 5 views
0

Ich habe ein Formular, in dem Benutzer Dateien auswählen und ein Zip-Archiv der ausgewählten erstellen können. Bis auf die Tatsache, dass die ZIP-Datei im Ordner wp-admin erstellt wurde, funktioniert alles wie erwartet. Stattdessen möchte ich, dass es in einem temporären Ordner gespeichert und sofort nach dem Herunterladen gelöscht wird.Ergebnis von WordPress AJAX Call Manifesting in wp-Admin-Ordner

ist die PHP-Code für die Erstellung des Archivs Zip:

// Creates zip file 
function bcg_zip_download() { 

    $files = $_POST['checked']; 

    $zip = new ZipArchive(); 
    $zip_name = time().".zip"; // Zip name 
    $zip->open($zip_name, ZipArchive::CREATE); 
    $full = wp_upload_dir(); 
    $base = $full['baseurl'] .'/'; 

    if (is_array($files)){ 
     foreach ($files as $file) { 
       $path = $file; 
       if(file_exists($_SERVER['DOCUMENT_ROOT'].'/bcg/wp-content/uploads/'.$path)){ 
        $zip->addFromString(basename($base . $path), file_get_contents($base . $path)); 
       } 
       else { 
       echo"file does not exist"; 
      } 
     } 
    } 

    $zip_file_path = $zip_name; 
    $zip->close(); 
    echo admin_url(). '/' . $zip_name; 
    unlink($zip); 
    wp_die(); 
} 

add_action('wp_ajax_nopriv_download_folder', 'bcg_zip_download'); 
add_action('wp_ajax_download_folder', 'bcg_zip_download'); 

Antwort

0

diese Zeilen zu ändern ersetzen

echo admin_url(). '/' . $zip_name; 

zu

echo site_url();.'/zip-folder/'.$zip_name; 
+0

Vielen Dank dafür. Leider wird dies nicht funktionieren, da die Datei tatsächlich im Ordner wp-admin erstellt wird. Ich möchte, dass es sich in einem tmp-Ordner befindet. –

0

Versuchen

$zip_name = time().".zip"; // Zip name 
$zip_output_path = get_home_path().'tmp/'.$zip_name; //tmp folder in wordpress root path //rewrite to your need 
if (!file_exists(get_home_path().'tmp/')) { 
    mkdir(get_home_path().'tmp/', 0777, true); 
} 
$zip->open($zip_output_path , ZipArchive::CREATE); 

Um die Dateien zu löschen, müssen Sie möglicherweise eine andere Funktion schreiben, um sie zu löschen, bevor Sie sie herunterladen. REF http://php.net/manual/en/function.readfile.php ODER schreiben Sie einen Cron, um sie regelmäßig zu löschen, wenn das für Ihre Anwendung geeignet ist.

+0

danke für deine antwort. Wenn ich jedoch meinen Code ändere, um das obige hinzuzufügen, wird eine Datei mit der Erweiterung .html anstelle von .zip erstellt. –

+0

Hey, das ist seltsam, da wir $ zip_name mit der Erweiterung '.zip' haben. Konnten Sie dieses Problem lösen? – rAjA