Create a JS and get the PDF links from Hidden Field
jQuery(document).ready(function($){ $('.download_all').on('click', function(e){ e.preventDefault(); var pdfUrls = $('#all_pdf').val(); if(pdfUrls == 'undefined') { alert('Please select at least one PDF.'); return; } $.ajax({ url: ajaxurl, type: 'POST', data: { action: 'download_pdfs_zip', pdf_urls: pdfUrls }, xhrFields: { responseType: 'blob' }, success: function(response) { const blob = new Blob([response], { type: 'application/zip' }); const link = document.createElement('a'); link.href = window.URL.createObjectURL(blob); link.download = 'documents.zip'; link.click(); }, error: function(xhr, status, error) { console.error(error); alert('Failed to download ZIP file.'); } }); }); });
Next create a AJAX to get the ZIP
//ZIP REPORT PDF add_action('wp_ajax_download_pdfs_zip', 'handle_download_pdfs_zip'); function handle_download_pdfs_zip() { $pdf_urls = isset($_POST['pdf_urls']) ? explode(',', $_POST['pdf_urls']) : []; if (empty($pdf_urls) || !is_array($pdf_urls)) { wp_send_json_error('No PDF URLs provided'); } $zip = new ZipArchive(); $zip_filename = tempnam(sys_get_temp_dir(), 'pdfs') . '.zip'; if ($zip->open($zip_filename, ZipArchive::CREATE) !== TRUE) { wp_send_json_error('Could not create ZIP file'); } foreach ($pdf_urls as $url) { $file_content = file_get_contents($url); if ($file_content !== false) { $path_parts = pathinfo($url); $filename = sanitize_file_name($path_parts['basename']); $zip->addFromString($filename, $file_content); } } $zip->close(); header('Content-Type: application/zip'); header('Content-Disposition: attachment; filename="documents.zip"'); header('Content-Length: ' . filesize($zip_filename)); readfile($zip_filename); unlink($zip_filename); exit; }
Jagdish Sarma Asked question May 16, 2025